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