2019-11-08 09:31:16 -05:00
---
2022-09-27 10:30:54 -04:00
name : Deploy super-linter release container images
2019-11-08 09:31:16 -05:00
2019-11-08 09:39:18 -05:00
on :
2021-07-13 16:20:17 -04:00
release :
2022-03-25 11:20:52 -04:00
types : [ published]
workflow_dispatch :
inputs :
release_version :
description: 'version to release. Ex : v4.3.2'
required : true
default : 'v'
2019-11-08 09:31:16 -05:00
jobs :
2022-01-26 10:17:59 -05:00
build :
2022-09-27 10:30:54 -04:00
name : Deploy container image - Release
2019-11-08 09:31:16 -05:00
runs-on : ubuntu-latest
2022-01-26 10:17:59 -05:00
strategy :
2022-02-07 11:28:48 -05:00
fail-fast : false
2022-01-26 10:17:59 -05:00
matrix :
images :
2022-09-27 10:30:54 -04:00
- container-image-id-prefix : slim-
2022-01-26 10:17:59 -05:00
deployment-environment-identifier : Release-SLIM
2022-09-27 10:30:54 -04:00
- container-image-id-prefix : ""
2022-01-26 10:17:59 -05:00
deployment-environment-identifier : Release
2021-11-15 11:25:36 -05:00
timeout-minutes : 60
2019-11-08 09:31:16 -05:00
steps :
2022-09-27 10:30:54 -04:00
- name : Setup Docker BuildX
2022-12-20 12:26:57 -05:00
uses : docker/setup-buildx-action@v2.2.1
2020-12-04 18:32:48 -05:00
2020-12-04 18:15:51 -05:00
- name : Login to DockerHub
2022-05-09 10:45:50 -04:00
uses : docker/login-action@v2.0.0
2020-12-04 13:49:09 -05:00
with :
username : ${{ secrets.DOCKER_USERNAME }}
password : ${{ secrets.DOCKER_PASSWORD }}
2020-08-20 13:58:11 -04:00
2020-12-04 18:15:51 -05:00
- name : Login to GitHub Container Registry
2022-05-09 10:45:50 -04:00
uses : docker/login-action@v2.0.0
2020-12-04 13:49:09 -05:00
with :
2022-01-26 10:17:59 -05:00
registry : ghcr.io
2022-12-20 18:14:59 -05:00
username : ${{ github.actor }}
password : ${{ secrets.GITHUB_TOKEN }}
2021-05-25 13:03:41 -04:00
2022-09-27 10:30:54 -04:00
- name : Get current release identifier
2021-07-19 10:28:49 -04:00
# shellcheck disable=SC2062
2021-06-03 10:45:15 -04:00
run : |
2023-01-04 02:07:14 -05:00
RELEASE_VERSION="${{ github.event.release.name }}"
2022-10-04 14:35:11 -04:00
2022-03-25 11:20:52 -04:00
if [ -z "${RELEASE_VERSION}" ]; then
echo "No release version found in environment, using input..."
2022-10-02 22:44:43 -04:00
RELEASE_VERSION="${{ github.event.inputs.release_version }}"
2022-03-25 11:20:52 -04:00
fi
2022-10-04 14:35:11 -04:00
# Check the RELEASE_VERSION again
if [ -z "${RELEASE_VERSION}" ]; then
echo "Error RELEASE_VERSION is empty. Exiting..."
exit 1
fi
2022-10-05 09:25:04 -04:00
if ! echo "${RELEASE_VERSION}" | grep -E -o "v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+"; then
echo "Error: RELEASE_VERSION doesn't look like a semantic version: ${RELEASE_VERSION}"
exit 2
fi
2022-09-30 13:55:04 -04:00
{
2023-01-04 02:07:14 -05:00
echo "RELEASE_VERSION=${RELEASE_VERSION}"
2022-09-30 13:55:04 -04:00
echo "SEMVER_VERSION=${RELEASE_VERSION#v}"
echo "SEMVER_MAJOR_VERSION=${SEMVER_VERSION%%.*}"
echo "SEMVER_MAJOR_VERSION_WITH_PREFIX=v${SEMVER_MAJOR_VERSION}"
} >> "${GITHUB_ENV}"
2021-06-03 10:45:15 -04:00
2022-09-27 10:30:54 -04:00
- name : Start deployment for the ${{ matrix.images.deployment-environment-identifier }} environment
2022-07-11 13:13:52 -04:00
uses : bobheadxi/deployments@v1.3.0
2022-01-26 10:17:59 -05:00
id : deployment
2021-06-24 11:19:42 -04:00
with :
2022-01-26 10:17:59 -05:00
step : start
token : ${{ secrets.GITHUB_TOKEN }}
env : ${{ matrix.images.deployment-environment-identifier }}
2021-06-24 11:19:42 -04:00
2022-09-27 10:30:54 -04:00
# We don't rebuild the image to avoid that the latest tag and the release tags don't point to what the release tag is pointing to.
# Instead, we pull the latest image and tag it.
- name : Add release tags and push image
2022-12-20 11:04:39 -05:00
uses : akhilerm/tag-push-action@v2.1.0
2021-05-25 11:14:43 -04:00
with :
2022-09-27 10:30:54 -04:00
src : ghcr.io/github/super-linter:${{ matrix.images.container-image-id-prefix }}latest
dst : |
2022-01-26 10:17:59 -05:00
github/super-linter:${{ matrix.images.container-image-id-prefix }}v4
github/super-linter:${{ matrix.images.container-image-id-prefix }}${{ env.RELEASE_VERSION }}
ghcr.io/github/super-linter:${{ matrix.images.container-image-id-prefix }}v4
ghcr.io/github/super-linter:${{ matrix.images.container-image-id-prefix }}${{ env.RELEASE_VERSION }}
2021-03-10 09:36:46 -05:00
2022-09-30 14:47:01 -04:00
- name : Checkout code
uses : actions/checkout@v3
with :
# Full git history is needed to get a proper list of commits and tags
fetch-depth : 0
2022-09-30 13:55:04 -04:00
# We use ^{} to recursively deference the tag to get the commit the tag is pointing at.
# Then, we use that reference to create new tags, so that the new tags point to the commit
# the original tag was pointing to, and not to the original tag.
# This notation is documented at https://git-scm.com/docs/gitrevisions#Documentation/gitrevisions.txt-emltrevgtemegemv0998em
- name : Update the major version and latest tags
run : |
git tag --force "${SEMVER_MAJOR_VERSION_WITH_PREFIX}" "${RELEASE_VERSION}^{}"
git tag --force latest "${RELEASE_VERSION}^{}"
git push --force origin "refs/tags/${SEMVER_MAJOR_VERSION_WITH_PREFIX}" "refs/tags/latest"
2022-09-27 10:30:54 -04:00
- name : Update the deployment status for the ${{ matrix.images.deployment-environment-identifier }} environment
2022-07-11 13:13:52 -04:00
uses : bobheadxi/deployments@v1.3.0
2021-03-10 09:36:46 -05:00
if : always()
with :
step : finish
token : ${{ secrets.GITHUB_TOKEN }}
status : ${{ job.status }}
deployment_id : ${{ steps.deployment.outputs.deployment_id }}
2022-03-15 04:54:31 -04:00
env : ${{ steps.deployment.outputs.env }}
2021-05-25 15:07:27 -04:00
env_url : https://github.com/github/super-linter/releases/tag/${{ env.RELEASE_VERSION }}
2021-07-13 16:20:17 -04:00
2022-09-27 10:30:54 -04:00
- name : Create a GitHub issue on failure
2021-07-13 16:20:17 -04:00
if : failure()
2022-02-14 16:20:29 -05:00
uses : actions/github-script@v6
2021-07-13 16:20:17 -04:00
id : create-issue
with :
# https://octokit.github.io/rest.js/v18#issues-create
github-token : ${{secrets.GITHUB_TOKEN}}
script : |
2021-11-12 09:53:39 -05:00
const create = await github.rest.issues.create({
2021-07-13 16:20:17 -04:00
owner : context.repo.owner,
repo : context.repo.repo,
title : "Failed to deploy release to production" ,
2021-11-12 12:02:28 -05:00
body : "Automation has failed us! Failed to push release ${{ env.RELEASE_VERSION }}\nMore information can be found at:\n - ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
2021-07-13 16:20:17 -04:00
})
console.log('create', create)
return create.data.number
2022-09-27 10:30:54 -04:00
- name : Assign admins to the issue created on failure
2022-02-14 16:20:29 -05:00
uses : actions/github-script@v6
2021-07-13 16:20:17 -04:00
if : failure()
with :
github-token : ${{secrets.GITHUB_TOKEN}}
script : |
2021-11-12 09:53:39 -05:00
github.rest.issues.addAssignees({
2021-07-13 16:20:17 -04:00
owner : context.repo.owner,
repo : context.repo.repo,
issue_number : "${{ steps.create-issue.outputs.result }}" ,
assignees : [
2022-12-20 22:55:49 -05:00
'lindluni'
2021-07-13 16:20:17 -04:00
]
})