mirror of
https://github.com/super-linter/super-linter.git
synced 2024-12-22 12:42:09 -05:00
parent
aea45684dd
commit
8eb4d621d6
4 changed files with 31 additions and 247 deletions
|
@ -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
|
35
.github/workflows/deploy-RELEASE-standard.yml
vendored
35
.github/workflows/deploy-RELEASE-standard.yml
vendored
|
@ -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 #
|
||||
#########################
|
||||
|
|
|
@ -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'
|
||||
|
|
30
docs/release-process.md
Normal file
30
docs/release-process.md
Normal file
|
@ -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.
|
Loading…
Reference in a new issue