diff --git a/.automation/update-actions-version.sh b/.automation/update-actions-version.sh deleted file mode 100755 index 4cb76603..00000000 --- a/.automation/update-actions-version.sh +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash - -################################################################################ -############# Update the actions.yml with version @admiralawkbar ############### -################################################################################ - -############ -# Defaults # -############\ -ACTION_FILE='action.yml' # Action file to update -COMMIT_SHA='' # Commit sha when PR is created -PR_ID='' # Pull Request NUmber when generated -VERSION='' # Version of release pulled from api - -################################################################################ -############################ FUNCTIONS BELOW ################################### -################################################################################ -################################################################################ -#### Function Header ########################################################### -Header() { - echo "-------------------------------------------------------" - echo "----------- GitHub Update Release Version -------------" - echo "-------------------------------------------------------" -} -################################################################################ -#### Function GetReleaseVersion ######################################### -GetReleaseVersion() { - echo "-------------------------------------------------------" - echo "Getting the latest Release version from GitHub ..." - - # Get the latest release on the Repository - GET_VERSION_CMD="$(echo "${RELEASE_NAME}" | grep -E -o "v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" 2>&1)" - - # Load the error code - ERROR_CODE=$? - - # Check the shell for errors - if [ "${ERROR_CODE}" -ne 0 ] || [ ${#GET_VERSION_CMD} -lt 1 ]; then - # Error - echo "ERROR! Failed to get the version!" - echo "ERROR:[${GET_VERSION_CMD}]" - exit 1 - else - # Success - echo "Latest Version:[${GET_VERSION_CMD}]" - fi - - # Set the version - VERSION=${GET_VERSION_CMD} -} -################################################################################ -#### Function UpdateActionFile ################################################# -UpdateActionFile() { - echo "-------------------------------------------------------" - echo "Updating the File:[$ACTION_FILE] with Version:[$VERSION]..." - - # Validate we can see the file - if [ ! -f "${ACTION_FILE}" ]; then - # ERROR - echo "ERROR! Failed to find the file:[${ACTION_FILE}]" - exit 1 - fi - - # Update the file - UPDATE_CMD=$(sed -i "s|image:.*|image: 'docker://ghcr.io/github/super-linter:${VERSION}'|" "${ACTION_FILE}" 2>&1) - - # Load the error code - ERROR_CODE=$? - - # Check the shell for errors - if [ "${ERROR_CODE}" -ne 0 ]; then - # Failed to update file - echo "ERROR! Failed to update ${ACTION_FILE}!" - echo "ERROR:[${UPDATE_CMD}]" - exit 1 - else - echo "Successfully updated file to:" - cat "${ACTION_FILE}" - fi -} -################################################################################ -#### Function CommitAndPush #################################################### -CommitAndPush() { - echo "-------------------------------------------------------" - echo "Creating commit, and pushing to PR..." - - # Commit the code to GitHub - COMMIT_CMD=$( - git checkout -b "Automation-Release-${VERSION}" - git add "${ACTION_FILE}" - git config --global user.name "SuperLinter Automation" - git config --global user.email "super_linter_automation@github.com" - git commit -m "Updating action.yml with new release version" 2>&1 - ) - - # Load the error code - ERROR_CODE=$? - - # Check the shell for errors - if [ "${ERROR_CODE}" -ne 0 ]; then - # ERROR - echo "ERROR! Failed to make commit!" - echo "ERROR:[$COMMIT_CMD]" - exit 1 - else - echo "Successfully staged commmit" - fi - - echo "-------------------------------------------------------" - # Push the code to the branch and create PR - PUSH_CMD=$( - git push --set-upstream origin "Automation-Release-${VERSION}" - gh pr create --title "Release-update-to-${VERSION}" --body "Automation Upgrade version ${VERSION} to action.yml" 2>&1 - ) - - # Load the error code - ERROR_CODE=$? - - # Check the shell for errors - if [ "${ERROR_CODE}" -ne 0 ]; then - # ERROR - echo "ERROR! Failed to create PR!" - echo "ERROR:[$PUSH_CMD]" - exit 1 - else - echo "Successfully Created PR" - fi - - # Get the pr number - for LINE in $PUSH_CMD; do - # echo "Line:[${LINE}]" - if [[ "${LINE}" == *"github.com"* ]]; then - # Getting the PR id - PR_ID=$(echo "${LINE}" | rev | cut -d'/' -f1 | rev) - fi - done - - # get the current commit sha - COMMIT_SHA=$(git rev-parse HEAD 2>&1) - - # Load the error code - ERROR_CODE=$? - - # Check the shell for errors - if [ "${ERROR_CODE}" -ne 0 ]; then - # ERROR - echo "ERROR! Failed to get comit sha!" - echo "ERROR:[$COMMIT_SHA]" - exit 1 - else - echo "Successfully grabbed commit sha" - fi - -} - -################################################################################ -#### Function SetActionsVariables ############################################## -SetActionsVariables() { - # Set the variables back to Actions - echo "-------------------------------------------------------" - echo "Setting the variables back to GitHub Actions..." - - echo "Setting RELEASE_VERSION:[${VERSION}]" - echo "RELEASE_VERSION=${VERSION}" >>"${GITHUB_ENV}" - - echo "Setting PR_ID:[${PR_ID}]" - echo "PR_ID=${PR_ID}" >>"${GITHUB_ENV}" - - echo "Setting COMMIT_SHA:[${COMMIT_SHA}]" - echo "COMMIT_SHA=${COMMIT_SHA}" >>"${GITHUB_ENV}" -} -################################################################################ -#### Function Footer ########################################################### -Footer() { - echo "-------------------------------------------------------" - echo "The step has completed" - echo "-------------------------------------------------------" -} -################################################################################ -################################## MAIN ######################################## -################################################################################ - -########## -# Header # -########## -Header - -########################## -# Get the latest version # -########################## -GetReleaseVersion - -########################## -# Update the action file # -########################## -UpdateActionFile - -######################## -# Commit and push file # -######################## -CommitAndPush - -##################################### -# Set the variables back to Actions # -##################################### -SetActionsVariables - -########## -# Footer # -########## -Footer diff --git a/.github/workflows/deploy-RELEASE-standard.yml b/.github/workflows/deploy-RELEASE-standard.yml index d2eee01b..5110f6bf 100644 --- a/.github/workflows/deploy-RELEASE-standard.yml +++ b/.github/workflows/deploy-RELEASE-standard.yml @@ -88,19 +88,6 @@ jobs: password: ${{ secrets.GCR_TOKEN }} registry: ghcr.io - ####################################### - # Update actions.yml with new version # - ####################################### - - name: Update actions.yml with release version and create PR - if: success() - run: ./.automation/update-actions-version.sh - # Note: script creates variables: - # PR_ID PR_REF RELEASE_VERSION COMMIT_SHA - env: - DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} - RELEASE_NAME: ${{ github.event.release.name }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - ################ # Docker cache # ################ @@ -146,28 +133,6 @@ jobs: rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache - ##################################################### - # Create the Required status check for Stack Linter # - ##################################################### - - name: Create Stack Linter Status - if: success() - run: | - curl -X POST --url "https://api.github.com/repos/${{ github.repository }}/statuses/${{ env.COMMIT_SHA }}" \ - -H "Accept: application/vnd.github.v3+json" \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - --data '{ "state": "success", "context": "Stack linter" }' - - ################################# - # Close the opened Pull Request # - ################################# - - name: Close PR - if: success() - run: | - curl -X PUT --url "https://api.github.com/repos/${{ github.repository }}/pulls/${{ env.PR_ID }}/merge" \ - -H "Accept: application/vnd.github.v3+json" \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - --data '{ "merge_method": "squash" }' - ######################### # Update Deployment API # ######################### diff --git a/action.yml b/action.yml index 3886d9cf..963681c3 100644 --- a/action.yml +++ b/action.yml @@ -4,7 +4,7 @@ author: 'GitHub' description: 'It is a simple combination of various linters, written in bash, to help validate your source code.' runs: using: 'docker' - image: 'docker://ghcr.io/github/super-linter:v4.7.0' + image: 'docker://ghcr.io/github/super-linter:v4.7.1' branding: icon: 'check-square' color: 'white' diff --git a/docs/release-process.md b/docs/release-process.md new file mode 100644 index 00000000..b3a724c5 --- /dev/null +++ b/docs/release-process.md @@ -0,0 +1,30 @@ +# Creating GitHub Super-Linter Release + +The Process to create a `Release` of the **GitHub/Super-Linter** is as follows: + +- Every push to `master/main` triggers a build and deploy of the **GitHub/Super-linter** +- This creates the following images: + - `github/super-linter:latest` + - `github/super-linter:slim-latest` +- This also causes the `Release drafter` action to update a new draft Release + +When an *Admin* wants to create a Release, the process is as follows: +- The *Admin* pushes an update to `master/main` and updates the `action.yml` to point to the next **Release** version + - Example: `image: 'docker://ghcr.io/github/super-linter:v4.6.2'` becomes: `image: 'docker://ghcr.io/github/super-linter:v4.6.3'` +- Then the *admin* can go to the Release page and update the current `draft Release` +- The *Admin* will set the correct version strings, and update any additional information in the current `draft Release` +- Once the *Admin* is ready, they will select **Publish Release** +- This triggers the **GitHub Actions** to take the current codebase, and build the containers, and deploy to their locations +- This creates the following images: + - `github/super-linter:latest` + - `github/super-linter:v4` + - `github/super-linter:v4.6.3` + - `github/super-linter:slim-latest` + - `github/super-linter:slim-v4` + - `github/super-linter:slim-v4.6.3` +- At this point, the Release is complete and images are available for general consumption + +## Pitfalls and Issues + +If the *Admin* Does not update the `action.yml` to the new version before the Release is published, then the Release will point back to the old version, and any Images will also be sent back to the previous version. +This is very much a chicken and the egg issue, but seems to be easily resolved by following the correct path.