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/merge-release.yml b/.github/workflows/merge-release.yml index 7ff5274e8..dcb5fbf42 100644 --- a/.github/workflows/merge-release.yml +++ b/.github/workflows/merge-release.yml @@ -36,6 +36,34 @@ jobs: - name: Set PR Output run: echo "pr=${{ steps.pr.outputs.pr }}" >> $GITHUB_OUTPUT + create-tag: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Install jq (JSON parser) + run: sudo apt-get install -y jq + + # Get version from package.json + - name: Get version from package.json + id: get_version + run: | + version=$(jq -r '.version' backend/package.json) # Assuming all package.json files have the same version + echo "Version: $version" + echo "::set-output name=version::$version" + + # Set Git Identity for tagging + - name: Set Git Identity + run: | + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + # Create a tag based on the version from package.json + - name: Create Git Tag + run: | + git tag "v${{ steps.get_version.outputs.version }}" + git push origin "v${{ steps.get_version.outputs.version }}" + # https://github.com/bcgov/quickstart-openshift-helpers deploy-test: name: Deploy (test) diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml index 3bb7b6ba6..65c5142ff 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.0.2 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..6e818e26d --- /dev/null +++ b/.github/workflows/pr-version-bump.yml @@ -0,0 +1,130 @@ +name: PR Bump Version Workflow + +on: + pull_request: + types: [opened] + branches: + - release/** + +concurrency: + # Cancel in progress for PR open and close + group: ${{ github.workflow }}-${{ github.event.number }} + cancel-in-progress: true + +jobs: + bump_version: + name: Bump Version for the Release Branch + runs-on: ubuntu-22.04 + strategy: + matrix: + package: [backend, frontend, webeoc] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - name: Install jq (JSON parser) + run: sudo apt-get install -y jq + + # Pull the latest changes from the release branch before version bump + - name: Pull latest changes with rebase + run: git pull --rebase origin ${{ github.base_ref }} + + # Get the latest global tag (from previous releases) + - name: Get latest global tag + id: check_tag + run: | + git fetch --tags + latest_tag=$(git tag --sort=-creatordate | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1 || echo "none") + echo "::set-output name=latest_tag::$latest_tag" + echo "Latest global tag: $latest_tag" + + # Get the current version from package.json + - name: Get version from package.json + id: get_version + run: | + cd ${{ matrix.package }} + current_version=$(jq -r '.version' package.json) + echo "::set-output name=current_version::$current_version" + echo "Current version in package.json: $current_version" + + # Compare current version with the latest tag to determine if it's the first PR + - name: Determine if it's the first PR + id: compare_version + run: | + current_version=${{ steps.get_version.outputs.current_version }} + latest_tag=${{ steps.check_tag.outputs.latest_tag }} + + if [[ "$current_version" == "$latest_tag" ]]; then + echo "First PR for this release branch" + echo "::set-output name=first_pr::true" + else + echo "Subsequent PR" + echo "::set-output name=first_pr::false" + fi + + # Bump minor version and reset patch for first PR into release branch + - name: Bump minor version and reset patch for first PR + if: ${{ steps.compare_version.outputs.first_pr == 'true' }} + run: | + cd ${{ matrix.package }} + current_version=$(jq -r '.version' package.json) + new_version=$(echo $current_version | awk -F. '{$2+=1; $3=0; print $1"."$2"."$3}') + jq --arg v "$new_version" '.version = $v' package.json > package.json.tmp && mv package.json.tmp package.json + echo "First PR: Resetting patch and bumping minor. New version: $new_version" + + # Bump patch version for subsequent PRs into release branch + - name: Bump patch version for subsequent PRs + if: ${{ steps.compare_version.outputs.first_pr == 'false' }} + run: | + cd ${{ matrix.package }} + current_version=$(jq -r '.version' package.json) + new_version=$(echo $current_version | awk -F. '{$3+=1; print $1"."$2"."$3}') + jq --arg v "$new_version" '.version = $v' package.json > package.json.tmp && mv package.json.tmp package.json + echo "Subsequent PR: Bumping patch. New version: $new_version" + + # Upload the updated package.json file + - name: Upload updated package.json + uses: actions/upload-artifact@v3 + with: + name: updated-package-${{ matrix.package }} + path: ${{ matrix.package }}/package.json + + commit_and_push: + name: Commit and Push All Changes + runs-on: ubuntu-22.04 + needs: bump_version # Wait for the bump_version job to complete + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + # Download all updated package.json files from the matrix jobs + - name: Download updated package.json files + uses: actions/download-artifact@v3 + with: + name: updated-package-backend + path: backend/ + - name: Download updated frontend package.json + uses: actions/download-artifact@v3 + with: + name: updated-package-frontend + path: frontend/ + - name: Download updated webeoc package.json + uses: actions/download-artifact@v3 + with: + name: updated-package-webeoc + path: webeoc/ + + # Set Git Identity + - name: Set Git Identity + run: | + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + # Commit and push all changes at once + - name: Commit and push all changes + run: | + git add backend/package.json frontend/package.json webeoc/package.json + git commit -m "chore: bump versions for backend, frontend, and webeoc" + git push origin HEAD:refs/heads/${{ github.head_ref }} # Push to the same branch diff --git a/.github/workflows/release-branch-creation.yml b/.github/workflows/release-branch-creation.yml new file mode 100644 index 000000000..9e80cf17c --- /dev/null +++ b/.github/workflows/release-branch-creation.yml @@ -0,0 +1,52 @@ +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 }}" + # Extract major, minor, and patch versions + version_array=(${latest_tag//./ }) + major_version=${version_array[0]//v/} + minor_version=${version_array[1]} + patch_version=${version_array[2]} + # Increment minor version and reset patch + 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" diff --git a/backend/package.json b/backend/package.json index 5fa883561..547e4579c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "nr-compliance-enforcement", - "version": "0.0.1", + "version": "0.27.0", "description": "BCGov devops quickstart. For reference, testing and new projects.", "main": "index.js", "scripts": { diff --git a/frontend/package.json b/frontend/package.json index cce62e34f..824355df6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { - "name": "nr-sample-natcomplaints", - "version": "1.0.1", + "name": "nr-natcomplaints", + "version": "0.27.0", "private": true, "dependencies": { "@faker-js/faker": "^8.0.2", diff --git a/webeoc/package.json b/webeoc/package.json index 325e71e99..0cdcf1afb 100644 --- a/webeoc/package.json +++ b/webeoc/package.json @@ -1,6 +1,6 @@ { "name": "webeoc", - "version": "0.0.1", + "version": "0.27.0", "description": "", "author": "", "private": true,