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