2022-12-23 23:09:14 -05:00
name : Publish Images
2022-12-23 20:26:05 -05:00
on :
push :
branches :
- main
jobs :
test :
name : Build and Test
2023-04-26 11:44:32 -04:00
runs-on : ubuntu-latest
2023-01-03 19:40:56 -05:00
concurrency :
2023-01-05 09:49:21 -05:00
group : ${{ github.workflow }}-main-${{ matrix.images.target }}
cancel-in-progress : true
2022-12-23 20:26:05 -05:00
permissions :
contents : read
deployments : write
issues : write
packages : write
strategy :
fail-fast : false
matrix :
images :
- environment : Production-SLIM
prefix : slim-
target : slim
- environment : Production
prefix : ""
2023-10-20 19:08:40 -04:00
target : standard
2022-12-23 20:26:05 -05:00
timeout-minutes : 60
2023-10-19 17:03:14 -04:00
env :
CONTAINER_IMAGE_ID : "ghcr.io/super-linter/super-linter:${{ matrix.images.prefix }}latest"
CONTAINER_IMAGE_TARGET : "${{ matrix.images.target }}"
2022-12-23 20:26:05 -05:00
steps :
2023-12-07 09:18:47 -05:00
- name : Checkout Code
uses : actions/checkout@v4
- name : Set build metadata
run : |
if [[ ${{ github.event_name }} == 'push' ]] || [[ ${{ github.event_name }} == 'merge_group' ]]; then
BUILD_REVISION=${{ github.sha }}
BUILD_VERSION=${{ github.sha }}
elif [[ ${{ github.event_name }} == 'pull_request' ]]; then
BUILD_REVISION=${{ github.event.pull_request.head.sha }}
BUILD_VERSION=${{ github.event.pull_request.head.sha }}
else
echo "[ERROR] Event not supported when setting build revision and build version"
exit 1
fi
if [ -z "${BUILD_REVISION}" ]; then
echo "[ERROR] BUILD_REVISION is empty"
exit 1
fi
if [ -z "${BUILD_VERSION}" ]; then
echo "[ERROR] BUILD_VERSION is empty"
exit 1
fi
{
echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
echo "BUILD_REVISION=${BUILD_REVISION}"
echo "BUILD_VERSION=${BUILD_VERSION}"
} >> "${GITHUB_ENV}"
2023-10-19 03:20:15 -04:00
- name : Free Disk space
shell : bash
run : |
sudo rm -rf /usr/local/lib/android
sudo rm -rf /usr/share/dotnet
2023-12-07 09:18:47 -05:00
- name : Set up Docker Buildx
uses : docker/setup-buildx-action@v3
2022-12-23 20:26:05 -05:00
2023-10-19 03:20:15 -04:00
- name : Build Image
uses : docker/build-push-action@v5
with :
context : .
file : ./Dockerfile
build-args : |
BUILD_DATE=${{ env.BUILD_DATE }}
2023-12-07 09:18:47 -05:00
BUILD_REVISION=${{ env.BUILD_REVISION }}
BUILD_VERSION=${{ env.BUILD_VERSION }}
2023-10-19 03:20:15 -04:00
load : true
push : false
secrets : |
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
tags : |
2023-10-19 17:03:14 -04:00
${{ env.CONTAINER_IMAGE_ID }}
2023-10-19 03:20:15 -04:00
target : "${{ matrix.images.target }}"
- name : Run Test Suite
2023-10-19 17:03:14 -04:00
run : make test
2023-10-19 03:20:15 -04:00
2022-12-23 20:26:05 -05:00
- name : Login to GHCR
2023-09-21 02:56:49 -04:00
uses : docker/login-action@v3.0.0
2022-12-23 20:26:05 -05:00
with :
registry : ghcr.io
username : ${{ github.actor }}
password : ${{ secrets.GITHUB_TOKEN }}
2023-01-04 22:23:28 -05:00
- name : Start ${{ matrix.images.environment }} Deployment
2023-01-23 08:00:45 -05:00
uses : bobheadxi/deployments@v1.4.0
2022-12-23 20:26:05 -05:00
id : deployment
with :
step : start
token : ${{ secrets.GITHUB_TOKEN }}
env : ${{ matrix.images.environment }}
- name : Build and Push Image
2023-09-18 15:01:58 -04:00
uses : docker/build-push-action@v5
2022-12-23 20:26:05 -05:00
with :
context : .
file : ./Dockerfile
build-args : |
BUILD_DATE=${{ env.BUILD_DATE }}
2023-12-07 09:18:47 -05:00
BUILD_REVISION=${{ env.BUILD_REVISION }}
BUILD_VERSION=${{ env.BUILD_VERSION }}
2023-12-15 03:22:13 -05:00
cache-from : type=registry,ref=${{ env.CONTAINER_IMAGE_ID }}
2022-12-23 20:26:05 -05:00
load : false
push : true
2023-01-04 22:43:51 -05:00
secrets : |
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
2022-12-23 20:26:05 -05:00
tags : |
2023-10-19 17:03:14 -04:00
${{ env.CONTAINER_IMAGE_ID }}
2022-12-23 20:26:05 -05:00
target : "${{ matrix.images.target }}"
2022-12-23 20:37:04 -05:00
- name : Update ${{ matrix.images.environment }} Deployment
2023-01-23 08:00:45 -05:00
uses : bobheadxi/deployments@v1.4.0
2023-12-19 05:10:53 -05:00
# We depend on the 'deployment' step outputs, so we can't run this step
# if the 'deployment' step didn't run. This can happen if any step
# before the 'deployment' step fails. That's why 'always()' is not
# suitable here.
if : steps.deployment.conclusion != 'cancelled' && steps.deployment.conclusion != 'skipped'
2022-12-23 20:26:05 -05:00
with :
step : finish
token : ${{ secrets.GITHUB_TOKEN }}
status : ${{ job.status }}
deployment_id : ${{ steps.deployment.outputs.deployment_id }}
env : ${{ steps.deployment.outputs.env }}
2023-05-25 19:59:32 -04:00
env_url : https://github.com/super-linter/super-linter
2022-12-23 20:26:05 -05:00
- name : Create Issue on Failure
2023-11-22 12:16:57 -05:00
uses : actions/github-script@v7
2023-01-03 19:40:56 -05:00
if : failure()
2022-12-23 20:26:05 -05:00
with :
github-token : ${{secrets.GITHUB_TOKEN}}
script : |
const create = await github.rest.issues.create({
owner : context.repo.owner,
repo : context.repo.repo,
title : "Failed to deploy to production" ,
2023-05-15 15:36:24 -04:00
body : "Automation has failed us!\nMore information can be found at:\n - ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" ,
2022-12-23 20:26:05 -05:00
assignees : [
2023-12-15 05:59:36 -05:00
"zkoppert" , "Hanse00" , "ferrarimarco"
2022-12-23 20:26:05 -05:00
]
})