Create Version and Tag #19
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create Version and Tag | |
# If you change this name, don't forget to change the name in 'deploy.yml'! | |
on: | |
schedule: | |
- cron: '0 3 * * 1' # Every Monday at 3am UTC | |
workflow_dispatch: # For manual triggering | |
env: | |
JAVA_VERSION: '11' | |
NODE_VERSION: '16.x' | |
jobs: | |
run-tests: # redux of usual CI defined in `ci.yml` | |
name: Run tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- name: Set up JDK ${{ env.JAVA_VERSION }} | |
uses: actions/setup-java@v4 | |
with: | |
java-version: ${{ env.JAVA_VERSION }} | |
distribution: 'zulu' | |
cache: 'sbt' | |
- name: Setup SBT | |
uses: sbt/setup-sbt@v1 | |
- name: Set up NodeJS ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Install Chez Scheme, LLVM & libuv | |
run: sudo apt-get install -y chezscheme llvm-15 libuv1-dev | |
- name: Run tests with retry | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 120 # NOTE: This needs _some_ value. As of writing this, 2 hours should be future-proof. :) | |
max_attempts: 3 | |
retry_on: error | |
command: sbt clean test | |
new_command_on_retry: sbt testQuick # should only rerun failed tests | |
set-version: | |
name: Bump Version | |
needs: [run-tests] | |
runs-on: ubuntu-latest | |
outputs: | |
new_version: ${{ steps.set-version.outputs.VERSION }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- name: Set up JDK ${{ env.JAVA_VERSION }} | |
uses: actions/setup-java@v4 | |
with: | |
java-version: ${{ env.JAVA_VERSION }} | |
distribution: 'zulu' | |
cache: 'sbt' | |
- name: Setup SBT | |
uses: sbt/setup-sbt@v1 | |
- name: Bump Effekt version using sbt | |
id: set-version | |
run: | | |
full_output=$(sbt 'bumpMinorVersion' -error) | |
new_version=$(echo "$full_output" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1) | |
new_version=$(echo "$new_version" | xargs) | |
if [[ ! $new_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
echo "Error: Version bump failed. Invalid version number: '${new_version}'" | |
echo "Full output was:" | |
echo "$full_output" | |
exit 1 | |
fi | |
echo "VERSION=${new_version}" >> $GITHUB_OUTPUT | |
echo "Successfully set new version: ${new_version}" | |
- name: Update Effekt version in NPM and MVN via sbt | |
run: sbt updateVersions | |
- name: Upload updated files | |
uses: actions/upload-artifact@v3 | |
with: | |
name: updated-files | |
path: | | |
project/EffektVersion.scala | |
package.json | |
pom.xml | |
commit-and-push: | |
name: Commit and Push Changes | |
needs: [set-version] | |
runs-on: ubuntu-latest | |
steps: | |
# Login as a GitHub App in order to bypass rules about committing to `master` directly | |
- name: Get GitHub App token | |
uses: actions/create-github-app-token@v1 | |
id: app-token | |
with: | |
app-id: ${{ secrets.EFFEKT_UPDATER_GH_APP_ID }} | |
private-key: ${{ secrets.EFFEKT_UPDATER_GH_CREDENTIALS_TOKEN }} | |
- name: Checkout code with token | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
token: ${{ steps.app-token.outputs.token }} | |
- name: Download updated files | |
uses: actions/download-artifact@v3 | |
with: | |
name: updated-files | |
- name: Get GitHub App User ID | |
id: get-user-id | |
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" | |
env: | |
GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
- name: Commit and push changes | |
run: | | |
echo "Verifying token and auth status:" | |
gh auth status | |
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' | |
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' | |
git add project/EffektVersion.scala | |
git add package.json | |
git add pom.xml | |
git commit -m "Bump version to ${{ needs.set-version.outputs.new_version }}" | |
git push | |
env: | |
GH_TOKEN: ${{ steps.app-token.outputs.token }} | |
- name: Create and push tag | |
run: | | |
git tag v${{ needs.set-version.outputs.new_version }} | |
git push origin v${{ needs.set-version.outputs.new_version }} | |
env: | |
GH_TOKEN: ${{ steps.app-token.outputs.token }} |