Skip to content

Add dynamic validations (#171) #81

Add dynamic validations (#171)

Add dynamic validations (#171) #81

Workflow file for this run

name: Test & Release
on:
push:
branches:
- main
tags:
- 'v[0-9].[0-9].[0-9]'
permissions:
contents: read
issues: write
jobs:
test:
uses: ./.github/workflows/test.yml
create-artifacts:
# First run the normal tests
needs: [test]
# Release on macOS for the macOS build targets
# macOS can release the other build targets too but not vice-versa
runs-on: macos-latest
outputs:
version: ${{ steps.get-version.outputs.version }}
is_snapshot: ${{ steps.get-version.outputs.is_snapshot }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
# Library is built for JVM 1.8, but we run gradle itself with a newer one because we can
# and the publishing plugin requires it
java-version: 21
cache: 'gradle'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Restore caches
uses: actions/cache/restore@v4
with:
path: |
~/.konan
~/.npm
${{ steps.yarn-cache-dir-path.outputs.dir }}
key: build-${{ runner.os }}-${{ hashFiles('build.gradle.kts', '**/gradle-wrapper.properties', 'settings.gradle.kts', 'kotlin-js-store/yarn.lock') }}
# There should've been at least one test run that creates the cache at this point
fail-on-cache-miss: true
- name: Get Version
id: get-version
shell: bash
run: |
if [[ $GITHUB_REF =~ refs/tags/v(.+) ]]; then
echo "Version is determined by git tag."
VERSION=${BASH_REMATCH[1]}
IS_SNAPSHOT="false"
else
echo "Version is determined by Gradle properties."
VERSION=$(./gradlew properties --console=plain -q | grep "^version:" | awk '{print $2}')
if [[ $VERSION != *"SNAPSHOT"* ]]; then
echo "Error: Non-tagged versions must be SNAPSHOT versions."
echo "::error file=build.gradle.kts,line=4::Must be SNAPSHOT version"
exit 1
fi
IS_SNAPSHOT="true"
fi
echo "Version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Is snapshot: $IS_SNAPSHOT"
echo "is_snapshot=$IS_SNAPSHOT" >> $GITHUB_OUTPUT
- name: Publish version '${{ steps.get-version.outputs.version }}' to sonatype & close staging repo
env:
CI_VERSION: ${{ steps.get-version.outputs.version }}
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
MAVEN_CENTRAL_TOKEN_USER: ${{ secrets.MAVEN_CENTRAL_TOKEN_USER }}
MAVEN_CENTRAL_TOKEN_PW: ${{ secrets.MAVEN_CENTRAL_TOKEN_PW }}
run: |
echo "Publishing version '$CI_VERSION' to sonatype."
./gradlew publishToSonatype closeSonatypeStagingRepository --info
release:
needs: [create-artifacts]
runs-on: ubuntu-latest
environment: ${{needs.create-artifacts.outputs.is_snapshot=='false' && 'maven-central-release' || 'maven-central-snapshot'}}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
cache: 'gradle'
- name: "Release version '${{needs.create-artifacts.outputs.version}}'"
env:
CI_VERSION: ${{needs.create-artifacts.outputs.version}}
MAVEN_CENTRAL_TOKEN_USER: ${{ secrets.MAVEN_CENTRAL_TOKEN_USER }}
MAVEN_CENTRAL_TOKEN_PW: ${{ secrets.MAVEN_CENTRAL_TOKEN_PW }}
run: ./gradlew findSonatypeStagingRepository releaseSonatypeStagingRepository --info