Skip to content

Create & Release

Create & Release #12

Workflow file for this run

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: 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 }}
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
continue-on-error: true
uses: requarks/changelog-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
token: ${{ github.token }}
tag: ${{ github.event.inputs.tag_name }}
- 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: 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
- 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 || 'No changelog available' }}
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 }}.war
asset_name: Fruzhin-${{ github.event.inputs.tag_name }}.war
asset_content_type: application/x-zip
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: 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
- name: Unzip WAR file
run: |
ls -l
unzip ./build/libs/*.war -d dist
rm -rf ./dist/META-INF ./dist/WEB-INF ./dist/index.html
- name: Update package.json version
run: |
VERSION=${{ github.event.inputs.tag_name }}
echo "Updating package.json with version: $VERSION"
sed -i -e 's/"version": ".*"/"version": "'"$VERSION"'"/' package.json
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: "https://registry.npmjs.org"
- name: Publish to NPM
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm publish