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 }}