From 0c3fe22df71b4f93479f367b044782081339b6e4 Mon Sep 17 00:00:00 2001 From: Yi-Ya Chen Date: Tue, 18 Feb 2025 17:27:49 +0800 Subject: [PATCH 1/4] ci: add ci pipeline Signed-off-by: Yi-Ya Chen --- .../build-extension-charts-on-pr-merge.yml | 136 ++++++++++++++++++ .../build-extension-charts-on-release.yml | 64 +++++++++ .github/workflows/build-extension-charts.yml | 34 ----- 3 files changed, 200 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/build-extension-charts-on-pr-merge.yml create mode 100644 .github/workflows/build-extension-charts-on-release.yml delete mode 100644 .github/workflows/build-extension-charts.yml diff --git a/.github/workflows/build-extension-charts-on-pr-merge.yml b/.github/workflows/build-extension-charts-on-pr-merge.yml new file mode 100644 index 00000000..da94cfeb --- /dev/null +++ b/.github/workflows/build-extension-charts-on-pr-merge.yml @@ -0,0 +1,136 @@ +name: Build and Release Extension Charts on PR Merge + +on: + push: + branches: + - 'release-harvester-v*' + +jobs: + setup-target-branch: + runs-on: ubuntu-latest + outputs: + target_branch: ${{ steps.get-version.outputs.target_branch }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Determine target branch + id: get-version + run: | + if [[ "${{ github.ref_name }}" =~ ^release-harvester-v([0-9]+\.[0-9]+)$ ]]; then + TARGET_BRANCH="v${BASH_REMATCH[1]}-head" + echo "target_branch=${TARGET_BRANCH}" >> $GITHUB_ENV + echo "target_branch=${TARGET_BRANCH}" >> $GITHUB_OUTPUT + else + echo "Error: invalid branch format." && exit 1 + fi + + - name: Ensure target branch exists + run: | + git fetch --all + if ! git ls-remote --exit-code --heads origin "${{ env.target_branch }}"; then + git checkout gh-pages + git checkout -b "${{ env.target_branch }}" + git push origin "${{ env.target_branch }}" + fi + + extract-version: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.get_version.outputs.version }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Extract version from package.json + id: get_version + run: | + VERSION=$(jq -r '.version' pkg/harvester/package.json) + echo "VERSION=${VERSION}" >> $GITHUB_ENV + echo "version=${VERSION}" >> $GITHUB_OUTPUT + + build-extension-charts: + needs: + - setup-target-branch + - extract-version + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup environment + run: | + corepack enable + yarn install --frozen-lockfile + + - name: Setup Helm + uses: azure/setup-helm@v3 + with: + version: v3.8.0 + + - name: Build Helm charts + run: | + yarn publish-pkgs -s ${{ github.repository }} -b ${{ needs.setup-target-branch.outputs.target_branch }} -t harvester-${{ needs.extract-version.outputs.version }} + + - name: Upload charts artifact + uses: actions/upload-artifact@v4 + with: + name: charts + path: tmp + + release: + needs: + - setup-target-branch + - extract-version + - build-extension-charts + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout release branch + uses: actions/checkout@v4 + with: + ref: '${{ github.ref_name }}' + + - name: Get last commit hash + id: last_commit + run: | + LAST_COMMIT=$(git rev-parse HEAD) + echo "LAST_COMMIT=${LAST_COMMIT}" >> $GITHUB_ENV + + - name: Checkout target branch + uses: actions/checkout@v4 + with: + ref: '${{ needs.setup-target-branch.outputs.target_branch }}' + + - name: Remove old artifacts + run: | + rm -rf extensions/harvester/${{ needs.extract-version.outputs.version }} + rm -rf charts/harvester/${{ needs.extract-version.outputs.version }} + rm -f assets/harvester/harvester-${{ needs.extract-version.outputs.version }}.tgz + + - name: Configure Git + run: | + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: charts + + - name: Commit and push artifacts + run: | + git add ./{assets,charts,extensions,index.yaml} + git commit -m "CI Build Artifacts (commit: ${{ env.LAST_COMMIT }}, version: ${{ needs.extract-version.outputs.version }})" + git push origin ${{ needs.setup-target-branch.outputs.target_branch }} + + - name: Run Helm chart releaser + uses: helm/chart-releaser-action@v1.4.1 + with: + charts_dir: ./charts + env: + CR_TOKEN: '${{ secrets.GITHUB_TOKEN }}' + CR_SKIP_EXISTING: true diff --git a/.github/workflows/build-extension-charts-on-release.yml b/.github/workflows/build-extension-charts-on-release.yml new file mode 100644 index 00000000..1f8247ee --- /dev/null +++ b/.github/workflows/build-extension-charts-on-release.yml @@ -0,0 +1,64 @@ +name: Build and Release Extension Charts + +on: + workflow_dispatch: + release: + types: [released] + pull_request: + branches: + - "release-harvester-v*" + types: + - merged + +defaults: + run: + shell: bash + working-directory: ./ + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run tests + uses: ./.github/actions/lint + + build-extension-charts: + needs: + - lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Determine target branch + id: set_target + run: | + if [[ "${{ github.event_name }}" == "release" ]]; then + echo "TARGET_BRANCH=gh-pages" >> $GITHUB_ENV + elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.merged }}" == "true" ]]; then + VERSION=$(echo "${{ github.ref }}" | sed -n 's/refs\/heads\/release-harvester-v\(.*\)/v\1-head/p') + if [[ -n "$VERSION" ]]; then + echo "TARGET_BRANCH=$VERSION" >> $GITHUB_ENV + else + echo "Error: Could not determine target branch." + exit 1 + fi + else + echo "Skipping build. No matching condition." + exit 0 + fi + + - name: Build and push extension charts + if: env.TARGET_BRANCH != '' + uses: rancher/dashboard/.github/workflows/build-extension-charts.yml@master + permissions: + actions: write + contents: write + deployments: write + pages: write + with: + target_branch: ${{ env.TARGET_BRANCH }} + tagged_release: ${{ github.ref_name }} diff --git a/.github/workflows/build-extension-charts.yml b/.github/workflows/build-extension-charts.yml deleted file mode 100644 index 88c840d3..00000000 --- a/.github/workflows/build-extension-charts.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Build and Release Extension Charts - -on: - workflow_dispatch: - release: - types: [released] - -defaults: - run: - shell: bash - working-directory: ./ - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: Run tests - uses: ./.github/actions/lint - build-extension-charts: - needs: - - lint - uses: rancher/dashboard/.github/workflows/build-extension-charts.yml@master - permissions: - actions: write - contents: write - deployments: write - pages: write - with: - target_branch: gh-pages - tagged_release: ${{ github.ref_name }} From 629cb0c601a90aa4c80b97c894554bb118b01e63 Mon Sep 17 00:00:00 2001 From: Yi-Ya Chen Date: Thu, 20 Feb 2025 16:30:13 +0800 Subject: [PATCH 2/4] ci: rename the workflow --- ...ld-and-upload.yaml => build-and-publish-standalone.yaml} | 2 +- ...-charts-on-pr-merge.yml => build-extension-on-merge.yml} | 0 ...charts-on-release.yml => build-extension-on-release.yml} | 0 ...nd-upload-branch.yaml => build-standalone-on-merge.yaml} | 6 +++--- ...upload-release.yaml => build-standalone-on-release.yaml} | 4 ++-- .github/workflows/{test.yaml => run-test-on-merge.yaml} | 0 6 files changed, 6 insertions(+), 6 deletions(-) rename .github/workflows/{build-and-upload.yaml => build-and-publish-standalone.yaml} (99%) rename .github/workflows/{build-extension-charts-on-pr-merge.yml => build-extension-on-merge.yml} (100%) rename .github/workflows/{build-extension-charts-on-release.yml => build-extension-on-release.yml} (100%) rename .github/workflows/{build-and-upload-branch.yaml => build-standalone-on-merge.yaml} (81%) rename .github/workflows/{build-and-upload-release.yaml => build-standalone-on-release.yaml} (77%) rename .github/workflows/{test.yaml => run-test-on-merge.yaml} (100%) diff --git a/.github/workflows/build-and-upload.yaml b/.github/workflows/build-and-publish-standalone.yaml similarity index 99% rename from .github/workflows/build-and-upload.yaml rename to .github/workflows/build-and-publish-standalone.yaml index c66afae2..eda93b6f 100644 --- a/.github/workflows/build-and-upload.yaml +++ b/.github/workflows/build-and-publish-standalone.yaml @@ -1,4 +1,4 @@ -name: Build Harvester Dashboard and Upload +name: Build Harvester Dashboard and Publish on: workflow_call: diff --git a/.github/workflows/build-extension-charts-on-pr-merge.yml b/.github/workflows/build-extension-on-merge.yml similarity index 100% rename from .github/workflows/build-extension-charts-on-pr-merge.yml rename to .github/workflows/build-extension-on-merge.yml diff --git a/.github/workflows/build-extension-charts-on-release.yml b/.github/workflows/build-extension-on-release.yml similarity index 100% rename from .github/workflows/build-extension-charts-on-release.yml rename to .github/workflows/build-extension-on-release.yml diff --git a/.github/workflows/build-and-upload-branch.yaml b/.github/workflows/build-standalone-on-merge.yaml similarity index 81% rename from .github/workflows/build-and-upload-branch.yaml rename to .github/workflows/build-standalone-on-merge.yaml index ad786c66..ac5f0893 100644 --- a/.github/workflows/build-and-upload-branch.yaml +++ b/.github/workflows/build-standalone-on-merge.yaml @@ -1,4 +1,4 @@ -name: Build Dashboard (Branch) +name: Build Standalone on PR Merge on: push: @@ -11,7 +11,7 @@ on: - main - 'release-harvester-v*' - '*-dev' - types: + types: - merged jobs: @@ -20,7 +20,7 @@ jobs: uses: ./.github/workflows/test.yaml build: name: Build and Upload Package - uses: ./.github/workflows/build-and-upload.yaml + uses: ./.github/workflows/build-and-publish-standalone.yaml needs: - build-validation permissions: diff --git a/.github/workflows/build-and-upload-release.yaml b/.github/workflows/build-standalone-on-release.yaml similarity index 77% rename from .github/workflows/build-and-upload-release.yaml rename to .github/workflows/build-standalone-on-release.yaml index b0829606..ac78a5ad 100644 --- a/.github/workflows/build-and-upload-release.yaml +++ b/.github/workflows/build-standalone-on-release.yaml @@ -1,4 +1,4 @@ -name: Build Dashboard (Release) +name: Build Standalone on Release on: push: tags: @@ -10,7 +10,7 @@ jobs: uses: ./.github/workflows/test.yaml build: name: Build and Upload Package - uses: ./.github/workflows/build-and-upload.yaml + uses: ./.github/workflows/build-and-publish-standalone.yaml needs: - build-validation permissions: diff --git a/.github/workflows/test.yaml b/.github/workflows/run-test-on-merge.yaml similarity index 100% rename from .github/workflows/test.yaml rename to .github/workflows/run-test-on-merge.yaml From 6a3153a7ecd6b1f8b36ca2a58f62fec8fefddd26 Mon Sep 17 00:00:00 2001 From: Yi-Ya Chen Date: Fri, 21 Feb 2025 10:49:26 +0800 Subject: [PATCH 3/4] ci: revert change Signed-off-by: Yi-Ya Chen --- .../workflows/build-extension-on-release.yml | 50 ++++--------------- 1 file changed, 10 insertions(+), 40 deletions(-) diff --git a/.github/workflows/build-extension-on-release.yml b/.github/workflows/build-extension-on-release.yml index 1f8247ee..d2b223e4 100644 --- a/.github/workflows/build-extension-on-release.yml +++ b/.github/workflows/build-extension-on-release.yml @@ -1,14 +1,9 @@ -name: Build and Release Extension Charts +name: Build and Release Extension Charts on Release on: workflow_dispatch: release: types: [released] - pull_request: - branches: - - "release-harvester-v*" - types: - - merged defaults: run: @@ -25,40 +20,15 @@ jobs: - name: Run tests uses: ./.github/actions/lint - build-extension-charts: needs: - lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Determine target branch - id: set_target - run: | - if [[ "${{ github.event_name }}" == "release" ]]; then - echo "TARGET_BRANCH=gh-pages" >> $GITHUB_ENV - elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.merged }}" == "true" ]]; then - VERSION=$(echo "${{ github.ref }}" | sed -n 's/refs\/heads\/release-harvester-v\(.*\)/v\1-head/p') - if [[ -n "$VERSION" ]]; then - echo "TARGET_BRANCH=$VERSION" >> $GITHUB_ENV - else - echo "Error: Could not determine target branch." - exit 1 - fi - else - echo "Skipping build. No matching condition." - exit 0 - fi - - - name: Build and push extension charts - if: env.TARGET_BRANCH != '' - uses: rancher/dashboard/.github/workflows/build-extension-charts.yml@master - permissions: - actions: write - contents: write - deployments: write - pages: write - with: - target_branch: ${{ env.TARGET_BRANCH }} - tagged_release: ${{ github.ref_name }} + uses: rancher/dashboard/.github/workflows/build-extension-charts.yml@master + permissions: + actions: write + contents: write + deployments: write + pages: write + with: + target_branch: gh-pages + tagged_release: ${{ github.ref_name }} \ No newline at end of file From 7f98dfe9c8563a81dec7fdce93f1c4db0cf69160 Mon Sep 17 00:00:00 2001 From: Yi-Ya Chen Date: Fri, 21 Feb 2025 12:33:33 +0800 Subject: [PATCH 4/4] ci: rename file Signed-off-by: Yi-Ya Chen --- .github/workflows/build-standalone-on-merge.yaml | 2 +- .github/workflows/build-standalone-on-release.yaml | 2 +- .github/workflows/{run-test-on-merge.yaml => run-lint.yaml} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{run-test-on-merge.yaml => run-lint.yaml} (100%) diff --git a/.github/workflows/build-standalone-on-merge.yaml b/.github/workflows/build-standalone-on-merge.yaml index ac5f0893..37de28e8 100644 --- a/.github/workflows/build-standalone-on-merge.yaml +++ b/.github/workflows/build-standalone-on-merge.yaml @@ -17,7 +17,7 @@ on: jobs: build-validation: name: Build Test - uses: ./.github/workflows/test.yaml + uses: ./.github/workflows/run-lint.yaml build: name: Build and Upload Package uses: ./.github/workflows/build-and-publish-standalone.yaml diff --git a/.github/workflows/build-standalone-on-release.yaml b/.github/workflows/build-standalone-on-release.yaml index ac78a5ad..d0eacdef 100644 --- a/.github/workflows/build-standalone-on-release.yaml +++ b/.github/workflows/build-standalone-on-release.yaml @@ -7,7 +7,7 @@ on: jobs: build-validation: name: Build Test - uses: ./.github/workflows/test.yaml + uses: ./.github/workflows/run-lint.yaml build: name: Build and Upload Package uses: ./.github/workflows/build-and-publish-standalone.yaml diff --git a/.github/workflows/run-test-on-merge.yaml b/.github/workflows/run-lint.yaml similarity index 100% rename from .github/workflows/run-test-on-merge.yaml rename to .github/workflows/run-lint.yaml