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