sigs.k8s.io/cluster-api-provider-azure@v1.17.0/.github/workflows/release.yaml (about) 1 name: Create Release 2 3 on: 4 push: 5 branches: 6 - main 7 paths: 8 - 'CHANGELOG/*.md' 9 10 permissions: # added using https://github.com/step-security/secure-repo 11 contents: read 12 13 jobs: 14 push_release_tag: 15 permissions: 16 pull-requests: read # for tj-actions/changed-files 17 contents: write # for "Create Release Tag" step 18 runs-on: ubuntu-latest 19 outputs: 20 release_tag: ${{ steps.release-version.outputs.release_version }} 21 steps: 22 - name: Harden Runner 23 uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 24 with: 25 egress-policy: audit 26 - name: Checkout code 27 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # tag=v4.1.7 28 with: 29 fetch-depth: 0 30 - name: Get changed files 31 id: changed-markdown-files 32 uses: tj-actions/changed-files@e9772d140489982e0e3704fea5ee93d536f1e275 # tag=v45.0.1 33 with: 34 files: CHANGELOG/**.md 35 - name: Get release version 36 id: release-version 37 run: | 38 if [[ ${{ steps.changed-markdown-files.outputs.all_changed_files_count }} != 1 ]]; then 39 echo "1 release notes file should be changed to create a release tag, found ${{ steps.changed-markdown-files.outputs.all_changed_files_count }}" 40 exit 1 41 fi 42 for changed_file in ${{ steps.changed-markdown-files.outputs.all_changed_files }}; do 43 export RELEASE_VERSION=$(echo "${changed_file}" | grep -oP '(?<=/)[^/]+(?=\.md)') 44 echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV 45 echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_OUTPUT 46 if [[ "$RELEASE_VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$ ]]; then 47 echo "Valid semver: $RELEASE_VERSION" 48 else 49 echo "Invalid semver: $RELEASE_VERSION" 50 exit 1 51 fi 52 done 53 - name: Determine the release branch to use 54 run: | 55 if [[ $RELEASE_VERSION =~ beta ]] || [[ $RELEASE_VERSION =~ alpha ]]; then 56 export RELEASE_BRANCH=main 57 echo "RELEASE_BRANCH=$RELEASE_BRANCH" >> $GITHUB_ENV 58 echo "This is a beta or alpha release, will use release branch $RELEASE_BRANCH" 59 else 60 export RELEASE_BRANCH=release-$(echo $RELEASE_VERSION | sed -E 's/^v([0-9]+)\.([0-9]+)\..*$/\1.\2/') 61 echo "RELEASE_BRANCH=$RELEASE_BRANCH" >> $GITHUB_ENV 62 echo "This is not a beta or alpha release, will use release branch $RELEASE_BRANCH" 63 fi 64 - name: Create or checkout release branch 65 run: | 66 if git show-ref --verify --quiet "refs/remotes/origin/$RELEASE_BRANCH"; then 67 echo "Branch $RELEASE_BRANCH already exists" 68 git checkout "$RELEASE_BRANCH" 69 else 70 git checkout -b "$RELEASE_BRANCH" 71 git push origin "$RELEASE_BRANCH" 72 echo "Created branch $RELEASE_BRANCH" 73 fi 74 - name: Validate tag does not already exist 75 run: | 76 if [[ $(git tag -l $RELEASE_VERSION) ]]; then 77 echo "Tag $RELEASE_VERSION already exists, exiting" 78 exit 1 79 fi 80 - name: Create Release Tag 81 run: | 82 git config user.name "${GITHUB_ACTOR}" 83 git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 84 git tag -a ${RELEASE_VERSION} -m ${RELEASE_VERSION} 85 git push origin ${RELEASE_VERSION} 86 echo "Created tag $RELEASE_VERSION" 87 release: 88 permissions: 89 contents: write # for softprops/action-gh-release to create GitHub release 90 name: create draft release 91 runs-on: ubuntu-latest 92 needs: push_release_tag 93 steps: 94 - name: Harden Runner 95 uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 96 with: 97 egress-policy: audit 98 - name: Set env 99 run: echo "RELEASE_TAG=${RELEASE_TAG}" >> $GITHUB_ENV 100 env: 101 RELEASE_TAG: ${{needs.push_release_tag.outputs.release_tag}} 102 - name: checkout code 103 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # tag=v4.1.7 104 with: 105 fetch-depth: 0 106 ref: ${{ env.RELEASE_TAG }} 107 - name: Calculate go version 108 run: echo "go_version=$(make go-version)" >> $GITHUB_ENV 109 - name: Set up Go 110 uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # tag=v5.0.2 111 with: 112 go-version: ${{ env.go_version }} 113 - name: generate release artifacts 114 run: | 115 make release 116 - name: get release notes 117 run: | 118 curl -L "https://raw.githubusercontent.com/${{ github.repository }}/main/CHANGELOG/${{ env.RELEASE_TAG }}.md" \ 119 -o "${{ env.RELEASE_TAG }}.md" 120 - name: Release 121 uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # tag=v2.0.8 122 with: 123 draft: true 124 files: out/* 125 body_path: ${{ env.RELEASE_TAG }}.md 126 tag_name: ${{ env.RELEASE_TAG }}