Skip to content

Commit

Permalink
ci: Combine release and npm-release.yml into a single workflow.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zurcusa committed Sep 24, 2024
1 parent f9655fd commit bfdb720
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 133 deletions.
70 changes: 0 additions & 70 deletions .github/workflows/npm-release.yml

This file was deleted.

62 changes: 0 additions & 62 deletions .github/workflows/release.yml

This file was deleted.

144 changes: 144 additions & 0 deletions .github/workflows/tag-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Create & Release

on:
workflow_dispatch:
inputs:
tag_name:
description: 'Tag name (e.g. v1.0.0)'
required: true
default: 'v1.0.0'
github_release:
description: 'GitHub release?'
required: true
type: boolean
default: true
npm_release:
description: 'NPM release?'
required: true
type: boolean
default: true

jobs:
shared-steps:
name: Run shared steps
runs-on: ubuntu-latest
steps:
- name: Check tag format
run: |
TAG_NAME=${{ github.event.inputs.tag_name }}
if [[ ! "$TAG_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid tag format: $TAG_NAME. Must follow v[0-9]+.[0-9]+.[0-9]+"
exit 1
else
echo "Valid tag format: $TAG_NAME"
fi
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: dev

- name: Write release version
run: |
VERSION=${{ github.event.inputs.tag_name }}
echo "Releasing version: $VERSION"
sed -i -e 's@version = .\d*.\d*.\d*.*@version = "'"$VERSION"'"@g' build.gradle.kts
- name: Create or use provided tag
run: |
# Use provided tag from the input
NEW_TAG=${{ github.event.inputs.tag_name }}
echo "Tag name: $NEW_TAG"
git tag $NEW_TAG
git push origin $NEW_TAG
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Set up cache for Gradle
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'corretto'

- name: Build Gradle Project
run: ./gradlew build

github-release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: shared-steps
if: ${{ github.event.inputs.github_release == 'true' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag_name }}

- name: Build Changelog
id: changelog
uses: requarks/changelog-action@v11
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
token: ${{ github.token }}
tag: ${{ github.event.inputs.tag_name }}

- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.event.inputs.tag_name }}
release_name: Release ${{ github.event.inputs.tag_name }}
body: ${{ steps.changelog.outputs.changes }}
draft: false
prerelease: false

- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./build/libs/Fruzhin-${{ github.event.inputs.tag_name }}.jar
asset_name: Fruzhin-${{ github.event.inputs.tag_name }}.jar
asset_content_type: application/java-archive

npm-release:
name: Publish to NPM
runs-on: ubuntu-latest
needs: shared-steps
if: ${{ github.event.inputs.npm_release == 'true' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag_name }}

- name: Unzip WAR file
run: |
unzip build/libs/*.war -d dist
rm -rf dist/META-INF dist/WEB-INF dist/index.html
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install NPM dependencies
run: npm install

- name: Publish to NPM
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"description": "An implementation of Fruzhin's light client usable in the web.",
"main": "./dist/js/fruzhin-lib.js",
"files": [
"./dist"
"./dist/js",
"./dist/genesis"
],
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
Expand Down

0 comments on commit bfdb720

Please sign in to comment.