diff --git a/.github/workflows/merge-hotfix.yml b/.github/workflows/merge-hotfix.yml index 81e24bff9..ba2b65893 100644 --- a/.github/workflows/merge-hotfix.yml +++ b/.github/workflows/merge-hotfix.yml @@ -29,10 +29,13 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 1 steps: - # Get PR number for squash merges to main + - uses: actions/checkout@v4 + # Get PR number for squash merges to release - name: PR Number id: pr - uses: bcgov-nr/action-get-pr@v0.0.1 + uses: ./.github/actions/get-pr-number + - name: Set PR Output + run: echo "pr=${{ steps.pr.outputs.pr }}" >> $GITHUB_OUTPUT # https://github.com/bcgov/quickstart-openshift-helpers deploy-hotfix: diff --git a/.github/workflows/merge-main.yml b/.github/workflows/merge-main.yml index 8dc582826..9fce4d334 100644 --- a/.github/workflows/merge-main.yml +++ b/.github/workflows/merge-main.yml @@ -36,6 +36,36 @@ jobs: - name: Set PR Output run: echo "pr=${{ steps.pr.outputs.pr }}" >> $GITHUB_OUTPUT + create_release: + name: Create GitHub Release (Keep Version) + runs-on: ubuntu-22.04 + strategy: + matrix: + package: [backend, frontend, webeoc] + steps: + - uses: actions/checkout@v4 + + # Retrieve the latest tag (from the release branch) + - name: Get Latest Tag + id: tag + run: | + git fetch --tags + latest_tag=$(git describe --tags --abbrev=0 --match "v*.*.*") + echo "::set-output name=latest_tag::$latest_tag" + echo "Latest tag: $latest_tag" + + # Create GitHub Release using the last tag + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.tag.outputs.latest_tag }} + name: Release ${{ steps.tag.outputs.latest_tag }} + body: | + ## Changes in this release: + - New features and bug fixes. + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # https://github.com/bcgov/quickstart-openshift-helpers deploy-prod: name: Deploy (prod) diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml index 098e2c0b8..697c49aa4 100644 --- a/.github/workflows/pr-open.yml +++ b/.github/workflows/pr-open.yml @@ -2,6 +2,8 @@ name: PR on: pull_request: + branches: + - release/** concurrency: # Cancel in progress for PR open and close @@ -20,7 +22,6 @@ jobs: steps: - uses: bcgov-nr/action-builder-ghcr@v2.2.0 with: - keep_versions: 50 package: ${{ matrix.package }} tag: ${{ github.event.number }} tag_fallback: latest diff --git a/.github/workflows/pr-version-bump.yml b/.github/workflows/pr-version-bump.yml new file mode 100644 index 000000000..159455008 --- /dev/null +++ b/.github/workflows/pr-version-bump.yml @@ -0,0 +1,65 @@ +name: Handle PR Merge and Version Update + +on: + pull_request: + types: [closed] + branches: + - release/** +jobs: + handle_pr: + name: Handle Merged PR + runs-on: ubuntu-22.04 + if: ${{ github.event.pull_request.merged == true }} + steps: + - uses: actions/checkout@v4 + + - name: Fetch all tags + run: git fetch --tags --force + + - name: Fetch tags from main + id: get_latest_tag + run: | + git fetch origin main --tags + latest_tag=$(git describe --tags --abbrev=0 origin/main) + echo "::set-output name=latest_tag::$latest_tag" + echo "Latest tag: $latest_tag" + + - name: Increment Patch Version + id: increment_version + run: | + latest_tag=${{ steps.get_latest_tag.outputs.latest_tag }} + version_array=(${latest_tag//./ }) + patch_version=${version_array[2]} + new_patch_version=$((patch_version + 1)) + new_version="${version_array[0]}.${version_array[1]}.${new_patch_version}" + echo "::set-output name=new_version::$new_version" + echo "New version: $new_version" + + - name: Update package.json versions + run: | + cd frontend + npm version ${{ steps.increment_version.outputs.new_version }} --no-git-tag-version + echo "Frontend package.json version updated to ${{ steps.increment_version.outputs.new_version }}" + + cd ../backend + npm version ${{ steps.increment_version.outputs.new_version }} --no-git-tag-version + echo "Backend package.json version updated to ${{ steps.increment_version.outputs.new_version }}" + + cd ../webeoc + npm version ${{ steps.increment_version.outputs.new_version }} --no-git-tag-version + echo "WebEOC package.json version updated to ${{ steps.increment_version.outputs.new_version }}" + + cd .. + + - name: Commit and Push Version Update + run: | + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git add frontend/package.json backend/package.json webeoc/package.json + git commit -m "chore: bump version to ${{ steps.increment_version.outputs.new_version }}" + git push origin HEAD:refs/heads/${{ github.head_ref }} + + - name: Create Git Tag + run: | + git tag "${{ steps.increment_version.outputs.new_version }}" + git push origin "${{ steps.increment_version.outputs.new_version }}" diff --git a/.github/workflows/release-branch-creation.yml b/.github/workflows/release-branch-creation.yml new file mode 100644 index 000000000..687cde518 --- /dev/null +++ b/.github/workflows/release-branch-creation.yml @@ -0,0 +1,50 @@ +name: Create New Tag on Release Branch Creation + +on: + create: + +jobs: + bump_minor_version: + name: Bump Minor Version and Create New Tag + runs-on: ubuntu-22.04 + # Only trigger for main release branches + if: startsWith(github.ref, 'refs/heads/release/') && !contains(github.ref, '/') + steps: + - uses: actions/checkout@v4 + + - name: Install npm + run: sudo apt-get install -y npm + + # Fetch the latest tag (sort by creation date) + - name: Fetch latest tag + id: latest_tag + run: | + git fetch --tags + latest_tag=$(git tag --sort=-creatordate | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1) + if [ -z "$latest_tag" ]; then + echo "No previous tags found, starting with v0.1.0" + latest_tag="v0.0.0" + fi + echo "::set-output name=latest_tag::$latest_tag" + echo "Latest tag: $latest_tag" + + # Bump the minor version and reset the patch to 0 + - name: Bump minor version + id: bump_version + run: | + latest_tag="${{ steps.latest_tag.outputs.latest_tag }}" + version_array=(${latest_tag//./ }) + major_version=${version_array[0]//v/} + minor_version=${version_array[1]} + patch_version=${version_array[2]} + new_minor_version=$((minor_version + 1)) + new_version="v${major_version}.${new_minor_version}.0" + echo "::set-output name=new_version::$new_version" + echo "New version: $new_version" + + # Create a new tag with the bumped minor version + - name: Create and push the new tag + run: | + new_version="${{ steps.bump_version.outputs.new_version }}" + git tag "$new_version" + git push origin "$new_version"