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