diff --git a/.github/workflows/go-release.yml b/.github/workflows/go-release.yml index 581a6d7..d668ce2 100644 --- a/.github/workflows/go-release.yml +++ b/.github/workflows/go-release.yml @@ -11,6 +11,7 @@ env: GOPATH: '/home/runner/work/managed-serviceaccount/managed-serviceaccount/go' GITHUB_REF: ${{ github.ref }} CHART_NAME: managed-serviceaccount + CHART_VERSION_FILE_PATH: ../charts/managed-serviceaccount/Chart.yaml defaults: run: @@ -32,117 +33,60 @@ jobs: - name: get major release version run: | echo "MAJOR_RELEASE_VERSION=${RELEASE_VERSION%.*}" >> $GITHUB_ENV - echo "TRIMED_RELEASE_VERSION=${RELEASE_VERSION#v}" >> $GITHUB_ENV + echo "TRIMMED_RELEASE_VERSION=${RELEASE_VERSION#v}" >> $GITHUB_ENV outputs: MAJOR_RELEASE_VERSION: ${{ env.MAJOR_RELEASE_VERSION }} RELEASE_VERSION: ${{ env.RELEASE_VERSION }} - TRIMED_RELEASE_VERSION: ${{ env.TRIMED_RELEASE_VERSION }} - images: - name: images + TRIMMED_RELEASE_VERSION: ${{ env.TRIMMED_RELEASE_VERSION }} + increase-chart-version: runs-on: ubuntu-latest needs: [ env ] - strategy: - matrix: - arch: [ amd64, arm64 ] steps: - - name: checkout code + - name: checkout repository uses: actions/checkout@v2 - with: - fetch-depth: 1 - path: go/src/open-cluster-management.io/managed-serviceaccount - - name: install Go - uses: actions/setup-go@v2 - with: - go-version: ${{ env.GO_VERSION }} - - name: install imagebuilder - run: go install github.com/openshift/imagebuilder/cmd/imagebuilder@v1.2.3 - - name: pull base image - run: docker pull registry.access.redhat.com/ubi8/ubi-minimal:latest --platform=linux/${{ matrix.arch }} - - name: images - run: | - IMAGE_TAG=${{ needs.env.outputs.RELEASE_VERSION }}-${{ matrix.arch }} \ - IMAGE_BUILD_EXTRA_FLAGS="--build-arg OS=linux --build-arg ARCH=${{ matrix.arch }}" \ - make images - - name: push - run: | - echo ${{ secrets.DOCKER_PASSWORD }} | docker login quay.io --username ${{ secrets.DOCKER_USER }} --password-stdin - docker push quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }}-${{ matrix.arch }} - image-manifest: - name: image manifest - runs-on: ubuntu-latest - needs: [ env, images ] - steps: - - name: checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 1 - path: go/src/open-cluster-management.io/managed-serviceaccount - - name: create + + - name: calculate next version + id: calculate_next_version run: | - echo ${{ secrets.DOCKER_PASSWORD }} | docker login quay.io --username ${{ secrets.DOCKER_USER }} --password-stdin - docker manifest create quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }} \ - quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }}-amd64 \ - quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }}-arm64 - - name: annotate + CURRENT_VERSION = "${{ needs.env.outputs.TRIMMED_RELEASE_VERSION }}" + echo "Current version: $CURRENT_VERSION" + # Extract the major and minor version components + MAJOR=$(echo $CURRENT_VERSION | cut -d '.' -f 1) + MINOR=$(echo $CURRENT_VERSION | cut -d '.' -f 2) + # Increment the minor version + NEXT_MINOR=$((MINOR + 1)) + # Construct the next version + NEXT_VERSION="$MAJOR.$NEXT_MINOR.0" + echo "::set-output name=next_version::$NEXT_VERSION" + + - name: check if pull request already exists + id: check_pull_request run: | - docker manifest annotate quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }} \ - quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }}-amd64 --arch amd64 - docker manifest annotate quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }} \ - quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }}-arm64 --arch arm64 - - name: push + PR_EXIST=$(gh pr list --state open --base "update-chart-version-${{ steps.calculate_next_version.outputs.next_version }}" | grep "Update version to ${{ steps.calculate_next_version.outputs.next_version }}") + if [ -n "$PR_EXIST" ]; then + echo "Pull request already exists for version ${{ steps.calculate_next_version.outputs.next_version }}. Exiting." + echo "::set-output name=pr_exists::true" + else + echo "No existing pull request found for version ${{ steps.calculate_next_version.outputs.next_version }}. Proceeding with creating a new one." + fi + + - name: update chart version file run: | - docker manifest push quay.io/open-cluster-management/managed-serviceaccount:${{ needs.env.outputs.RELEASE_VERSION }} - release: - name: release - runs-on: ubuntu-latest - needs: [ env, image-manifest ] - steps: - - name: checkout code - uses: actions/checkout@v2 + # NEXT_VERSION=$INPUT_NEXT_VERSION + sed -i "s/version: $CURRENT_VERSION/version: $NEXT_VERSION/" VERSION_FILE_PATH + + - name: create pull request + if: steps.check_pull_request.outputs.pr_exists != 'true' + uses: peter-evans/create-pull-request@v3 with: - fetch-depth: 1 - path: go/src/open-cluster-management.io/managed-serviceaccount - - name: setup helm - uses: azure/setup-helm@v1 - - name: chart package - run: | - mkdir -p release - pushd release - helm package ../charts/${{ env.CHART_NAME }}/ - popd - - name: generate changelog - run: | - echo "# Managed ServiceAccount ${{ needs.env.outputs.RELEASE_VERSION }}" > /home/runner/work/changelog.txt - - name: publish release - uses: softprops/action-gh-release@v1 + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: | + Update chart version to ${{ steps.calculate_next_version.outputs.next_version }} + + Signed-off-by: "$GITHUB_ACTOR" "$GITHUB_ACTOR@users.noreply.github.com" + title: "Update chart version to ${{ steps.calculate_next_version.outputs.next_version }}" + body: "Automatically updating version to ${{ steps.calculate_next_version.outputs.next_version }}" + branch: update-chart-version-${{ steps.calculate_next_version.outputs.next_version }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - body_path: /home/runner/work/changelog.txt - files: | - go/src/open-cluster-management.io/managed-serviceaccount/release/*.tgz - draft: true - prerelease: false - generate_release_notes: true - - name: submit charts to OCM chart repo - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.OCM_BOT_PAT }} - script: | - try { - const result = await github.rest.actions.createWorkflowDispatch({ - owner: 'open-cluster-management-io', - repo: 'helm-charts', - workflow_id: 'download-chart.yml', - ref: 'main', - inputs: { - repo: "${{ github.repository }}", - version: "${{ needs.env.outputs.TRIMED_RELEASE_VERSION }}", - "chart-name": "${{ env.CHART_NAME }}", - }, - }) - console.log(result); - } catch(error) { - console.error(error); - core.setFailed(error); - } + CURRENT_VERSION: ${{ needs.env.outputs.TRIMMED_RELEASE_VERSION }} + NEXT_VERSION: ${{ steps.calculate_next_version.outputs.next_version }}