Many times some fix is made and I have to tell people on discord "this didn't work yet because bling only builds at set times or manually". No more!
111 lines
3.6 KiB
YAML
111 lines
3.6 KiB
YAML
name: build-stable
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths-ignore: # don't rebuild if only documentation has changed
|
|
- "**.md"
|
|
pull_request:
|
|
branches: ['main']
|
|
merge_group:
|
|
branches: ['main']
|
|
schedule:
|
|
- cron: '0 5 * * *' # 5 am everyday
|
|
workflow_dispatch:
|
|
env:
|
|
IMAGE_NAME: bling
|
|
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
|
|
|
|
jobs:
|
|
push-ghcr:
|
|
name: Build and push image
|
|
runs-on: ubuntu-22.04
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
id-token: write
|
|
steps:
|
|
# Checkout push-to-registry action GitHub repository
|
|
- name: Checkout Push to Registry action
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Generate tags
|
|
id: generate-tags
|
|
shell: bash
|
|
run: |
|
|
echo "sha_short=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT
|
|
alias_tags=()
|
|
# Only perform the follow code when the action is spawned from a Pull Request
|
|
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
|
alias_tags+=("pr-${{ github.event.number }}")
|
|
else
|
|
# The following is run when the timer is triggered or a merge/push to main
|
|
echo "date=$(date +%Y%m%d)" >> $GITHUB_OUTPUT
|
|
alias_tags+=("latest")
|
|
fi
|
|
echo "alias_tags=${alias_tags[*]}" >> $GITHUB_OUTPUT
|
|
|
|
# Build image using Buildah action
|
|
- name: Build Image
|
|
id: build_image
|
|
uses: redhat-actions/buildah-build@v2
|
|
with:
|
|
containerfiles: |
|
|
./Containerfile
|
|
image: ${{ env.IMAGE_NAME }}
|
|
tags: |
|
|
${{ steps.generate-tags.outputs.alias_tags }}
|
|
${{ steps.generate-tags.outputs.date }}
|
|
${{ steps.generate-tags.outputs.sha_short }}
|
|
oci: true
|
|
|
|
# Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR.
|
|
# https://github.com/macbre/push-to-ghcr/issues/12
|
|
- name: Lowercase Registry
|
|
id: registry_case
|
|
uses: ASzc/change-string-case-action@v5
|
|
with:
|
|
string: ${{ env.IMAGE_REGISTRY }}
|
|
|
|
# Push the image to GHCR (Image Registry)
|
|
- name: Push To GHCR
|
|
uses: redhat-actions/push-to-registry@v2
|
|
id: push
|
|
if: github.event_name != 'pull_request'
|
|
env:
|
|
REGISTRY_USER: ${{ github.actor }}
|
|
REGISTRY_PASSWORD: ${{ github.token }}
|
|
with:
|
|
image: ${{ steps.build_image.outputs.image }}
|
|
tags: ${{ steps.build_image.outputs.tags }}
|
|
registry: ${{ steps.registry_case.outputs.lowercase }}
|
|
username: ${{ env.REGISTRY_USER }}
|
|
password: ${{ env.REGISTRY_PASSWORD }}
|
|
extra-args: |
|
|
--disable-content-trust
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v3
|
|
if: github.event_name != 'pull_request'
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# Sign container
|
|
- uses: sigstore/cosign-installer@v3.1.2
|
|
if: github.event_name != 'pull_request'
|
|
|
|
- name: Sign container image
|
|
if: github.event_name != 'pull_request'
|
|
run: |
|
|
cosign sign -y --key env://COSIGN_PRIVATE_KEY ${{ steps.registry_case.outputs.lowercase }}/${{ env.IMAGE_NAME }}@${TAGS}
|
|
env:
|
|
TAGS: ${{ steps.push.outputs.digest }}
|
|
COSIGN_EXPERIMENTAL: false
|
|
COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }}
|
|
|
|
- name: Echo outputs
|
|
if: github.event_name != 'pull_request'
|
|
run: |
|
|
echo "${{ toJSON(steps.push.outputs) }}"
|