diff --git a/.github/workflows/auto-release-rc.yml b/.github/workflows/auto-release-rc.yml new file mode 100644 index 00000000..274659b4 --- /dev/null +++ b/.github/workflows/auto-release-rc.yml @@ -0,0 +1,79 @@ +# Compares the version in package.json to tags on the repo. If the tag doesn't exist, a new tag is created, which +# then triggers the normal "on tag" release automation in the build job +name: Auto Tag RC + +on: + push: + branches: + - develop + +concurrency: + group: rc-release-check + +jobs: + release-dev: + name: Release rc version + runs-on: ubuntu-latest + steps: + - name: Checkout current branch + uses: actions/checkout@v4 + with: + # Need REPO_COMMIT token so when the tag is created, the tag automation runs + token: ${{ secrets.REPO_COMMIT }} + fetch-depth: 0 + + - name: Setup commit signing for ChiaAutomation + uses: Chia-Network/actions/commit-sign/gpg@main + with: + gpg_private_key: ${{ secrets.CHIA_AUTOMATION_PRIVATE_GPG_KEY }} + passphrase: ${{ secrets.CHIA_AUTOMATION_PRIVATE_GPG_PASSPHRASE }} + + - name: Check for current version tag. Create if it doesn't exist + env: + GH_TOKEN: ${{ github.token }} + run: | + stable_version=$(gh release list --limit 1 --order desc --exclude-pre-releases --json tagName --jq ".[].tagName") + echo "Latest release is $stable_version" + rc_version=$(gh release list --json tagName --jq ".[] | select(.tagName | test(\"${version}-rc*\")) | .tagName") + echo "Latest release candidate is $rc_version" + + if [[ -z ${rc_version} ]]; then + # Extract the major, minor, and patch versions + IFS='.' read -r major minor patch <<< "$stable_version" + + # Increment the patch version + new_patch=$((patch + 1)) + + # Construct the new version string + version="$major.$minor.$new_patch-rc1" + + echo "New version: $version" + + else + # Extract the major, minor, patch, and rc parts + IFS='.-' read -r major minor patch rc <<< "$rc_version" + + # Extract just the number of the rc + rc_number="${rc#rc}" + + # Increment the rc number + rc_number=$((rc_number +1)) + + # Construct the new version string + version="$major.$minor.$patch-rc$rc_number" + + echo "New version: $version" + + fi + + if [ $(git tag -l "$version") ]; then + echo "$version tag exists, deleting..." + git tag -d $version + git push --delete origin $version + fi + echo "Tag does not exist. Creating and pushing tag" + rm -f CHANGELOG.md + npx conventional-changelog-cli -p angular -i CHANGELOG.md -s -r 0 + changes=$(npx conventional-changelog-cli -r 1 | tail -n +2) + git tag $version -m "Release $version $changes" + git push origin $version diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index a97318e1..ee5f46d2 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -11,8 +11,8 @@ concurrency: group: main-release-check jobs: - check-version: - name: Check version increment + check-version-and-release: + name: Check version increment and release runs-on: ubuntu-latest steps: - name: Clean workspace @@ -21,8 +21,8 @@ jobs: - name: Checkout current branch uses: actions/checkout@v4 with: - # Need PACKAGE_ADMIN_PAT token so when the tag is created, the tag automation runs - token: ${{ secrets.PACKAGE_ADMIN_PAT }} + # Need REPO_COMMIT token so when the tag is created, the tag automation runs + token: ${{ secrets.REPO_COMMIT }} fetch-depth: 0 - name: Setup commit signing for ChiaAutomation diff --git a/.github/workflows/build-installers.yaml b/.github/workflows/build-installers.yaml index f015add5..c5073c14 100644 --- a/.github/workflows/build-installers.yaml +++ b/.github/workflows/build-installers.yaml @@ -4,15 +4,12 @@ on: push: tags: - '**' - branches: - - refactor/refactor-base #remove this once rebuild is merged pull_request: branches: - '**' concurrency: - # SHA is added to the end if on `main` to let all main workflows run - group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ github.ref == 'refs/heads/main' && github.sha || '' }} + group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true permissions: @@ -35,7 +32,7 @@ jobs: - name: Setup Node 20 uses: actions/setup-node@v4 with: - node-version: '20.10' + node-version: '20.16' - name: Install Husky run: npm install --save-dev husky @@ -43,6 +40,16 @@ jobs: - name: install dmg-license run: npm i dmg-license + - name: Change the package.json version if an RC tag + if: startsWith(github.ref, 'refs/tags/') && contains( github.ref, '-rc') + run: | + echo "Github ref: $GITHUB_REF" + IFS='/' read -r base directory tag <<< "$GITHUB_REF" + echo "Extracted tag is $tag" + + jq ".version = \"${tag}\"" package.json > package.tmp + mv package.tmp package.json + - name: npm install run: | npm install @@ -59,7 +66,7 @@ jobs: SIGNING_SECRET: "${{ secrets.SM_CLIENT_CERT_FILE_B64 }}" - name: Import Apple installer signing certificate - if: steps.check_secrets.outputs.HAS_SIGNING_SECRET + if: steps.check_secrets.outputs.HAS_SIGNING_SECRET && startsWith(github.ref, 'refs/tags/') uses: Apple-Actions/import-codesign-certs@v1 with: p12-file-base64: ${{ secrets.APPLE_DEV_ID_APP }} @@ -71,7 +78,7 @@ jobs: run: npm run electron:package:mac - name: Notarize - if: steps.check_secrets.outputs.HAS_SIGNING_SECRET + if: steps.check_secrets.outputs.HAS_SIGNING_SECRET && startsWith(github.ref, 'refs/tags/') run: | DMG_FILE=$(find ${{ github.workspace }}/dist/ -type f -name '*.dmg') xcrun notarytool submit \ @@ -94,10 +101,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Setup Node 20.10 + - name: Setup Node 20.16 uses: actions/setup-node@v4 with: - node-version: '20.10' + node-version: '20.16' - name: Install Husky run: npm install --save-dev husky @@ -105,6 +112,15 @@ jobs: - name: Ignore Husky where not compatible run: npm pkg delete scripts.prepare + - name: Change the package.json version if an RC tag + if: startsWith(github.ref, 'refs/tags/') && contains( github.ref, '-rc') + shell: bash + run: | + IFS='/' read -r base directory tag <<< "$GITHUB_REF" + + jq ".version = \"${tag}\"" package.json > package.tmp + mv package.tmp package.json + - name: npm install run: | node --version @@ -155,14 +171,22 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Setup Node 20.10 + - name: Setup Node 20.16 uses: actions/setup-node@v4 with: - node-version: '20.10' + node-version: '20.16' - name: Install Husky run: npm install --save-dev husky + - name: Change the package.json version if an RC tag + if: startsWith(github.ref, 'refs/tags/') && contains( github.ref, '-rc') + run: | + IFS='/' read -r base directory tag <<< "$GITHUB_REF" + + jq ".version = \"${tag}\"" package.json > package.tmp + mv package.tmp package.json + - name: npm install run: | node --version @@ -190,14 +214,22 @@ jobs: - name: Checkout Code uses: actions/checkout@v4 - - name: Setup Node 20.10 + - name: Setup Node 20.16 uses: actions/setup-node@v4 with: - node-version: '20.10' + node-version: '20.16' - name: Install Husky run: npm install --save-dev husky + - name: Change the package.json version if an RC tag + if: startsWith(github.ref, 'refs/tags/') && contains( github.ref, '-rc') + run: | + IFS='/' read -r base directory tag <<< "$GITHUB_REF" + + jq ".version = \"${tag}\"" package.json > package.tmp + mv package.tmp package.json + - name: npm install and build run: | node --version @@ -258,9 +290,33 @@ jobs: echo "EXE_FILE=$EXE_FILE" >>$GITHUB_ENV echo "WEB_FILE=$WEB_FILE" >>$GITHUB_ENV + # RC release should not be set as latest + - name: Decide if release should be set as latest + id: is_latest + shell: bash + run: | + unset IS_LATEST + + echo "Github ref is $GITHUB_REF" + + if [[ "$GITHUB_REF" =~ "-rc" ]]; then + echo "release candidate tag matched" + IS_LATEST='false' + IS_PRERELEASE='true' + else + echo "main branch release matched" + IS_LATEST='true' + IS_PRERELEASE='false' + fi + + echo "IS_LATEST=${IS_LATEST}" >> "$GITHUB_OUTPUT" + echo "IS_PRERELEASE=${IS_PRERELEASE}" >> "$GITHUB_OUTPUT" + - name: Release - uses: softprops/action-gh-release@v0.1.15 + uses: softprops/action-gh-release@v2.1.0 with: + prerelease: ${{steps.is_latest.outputs.IS_PRERELEASE}} + make_latest: "${{steps.is_latest.outputs.IS_LATEST}}" files: | ${{ env.DMG_FILE }} ${{ env.DEB_FILE }} @@ -268,19 +324,19 @@ jobs: ${{ env.WEB_FILE }} - name: Get repo name + if: startsWith(github.ref, 'refs/tags/') && !contains( github.ref, '-rc') id: repo-name run: | echo "REPO_NAME=$(echo "$GITHUB_REPOSITORY" | cut -d "/" -f 2)" >>$GITHUB_OUTPUT - name: Get tag name + if: startsWith(github.ref, 'refs/tags/') && !contains( github.ref, '-rc') id: tag-name run: | echo "TAGNAME=$(echo $GITHUB_REF | cut -d / -f 3)" >>$GITHUB_OUTPUT - - name: Gets JWT Token from GitHub - uses: Chia-Network/actions/github/jwt@main - - name: Trigger apt repo update + if: startsWith(github.ref, 'refs/tags/') && !contains( github.ref, '-rc') uses: Chia-Network/actions/github/glue@main with: json_data: '{"climate_tokenization_repo":"${{ steps.repo-name.outputs.REPO_NAME }}","application_name":"[\"${{ env.APP_NAME }}\"]","release_version":"${{ steps.tag-name.outputs.TAGNAME }}","add_debian_version":"true","arm64":"available"}'