mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-04 06:25:41 -04:00
build: push tvapp v2 docker files
This commit is contained in:
523
.github/workflows/deploy-docker-dockerhub.yml
vendored
Normal file
523
.github/workflows/deploy-docker-dockerhub.yml
vendored
Normal file
@@ -0,0 +1,523 @@
|
||||
# #
|
||||
# @type github workflow
|
||||
# @author Aetherinox
|
||||
# @url https://github.com/Aetherinox
|
||||
# @usage deploys docker container to Dockerhub
|
||||
# @secrets secrets.ADMINSERV_GPG_KEY_ASC gpg private key (armored) | BEGIN PGP PRIVATE KEY BLOCK
|
||||
# secrets.ADMINSERV_GPG_PASSPHRASE gpg private key passphrase
|
||||
# secrets.IMAGE_DOCKERHUB_TOKEN hub.docker.com access token
|
||||
# #
|
||||
|
||||
name: "📦 Deploy › Docker › Dockerhub"
|
||||
run-name: "📦 Deploy › Docker › Dockerhub"
|
||||
|
||||
# #
|
||||
# Triggers
|
||||
# #
|
||||
|
||||
on:
|
||||
|
||||
# #
|
||||
# Trigger › Workflow Dispatch
|
||||
#
|
||||
# If any values are not provided, will use fallback env variable
|
||||
# #
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
|
||||
# #
|
||||
# Image Name
|
||||
#
|
||||
# used in github image path
|
||||
# ${{ env.IMAGE_AUTHOR }}/${{ env.IMAGE_NAME }}
|
||||
# #
|
||||
|
||||
IMAGE_NAME:
|
||||
description: '📦 Image Name'
|
||||
required: true
|
||||
default: 'keeweb'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# Image Author
|
||||
#
|
||||
# used in github image path
|
||||
# ${{ env.IMAGE_AUTHOR }}/${{ env.IMAGE_NAME }}
|
||||
# #
|
||||
|
||||
IMAGE_AUTHOR:
|
||||
description: '🪪 Image Author'
|
||||
required: true
|
||||
default: 'antelle'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# Image Version
|
||||
#
|
||||
# used to create new release tag, and add version to docker image name
|
||||
# #
|
||||
|
||||
IMAGE_VERSION:
|
||||
description: '🏷️ Image Version'
|
||||
required: true
|
||||
default: '1.19.0'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# Image Dockerhub username
|
||||
#
|
||||
# this is the user to sign into Dockerhub as.
|
||||
# #
|
||||
|
||||
IMAGE_DOCKERHUB_USERNAME:
|
||||
description: '🪪 Dockerhub Username'
|
||||
required: true
|
||||
default: 'antelle'
|
||||
type: string
|
||||
|
||||
# #
|
||||
# true no changes to the repo will be made
|
||||
# false workflow will behave normally, and push any changes detected to the files
|
||||
# #
|
||||
|
||||
DRY_RUN:
|
||||
description: '🐛 Dry Run (Debug)'
|
||||
required: true
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
# #
|
||||
# true released version will be marked as a development build and will have the v1.x.x-development tag instead of -latest
|
||||
# false release version will be marked with -latest docker tag
|
||||
# #
|
||||
|
||||
DEV_RELEASE:
|
||||
description: '🧪 Development Release'
|
||||
required: true
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
# #
|
||||
# Trigger › Push
|
||||
# #
|
||||
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
# #
|
||||
# Environment Vars
|
||||
# #
|
||||
|
||||
env:
|
||||
IMAGE_NAME: ${{ github.event.inputs.IMAGE_NAME || 'keeweb' }}
|
||||
IMAGE_AUTHOR: ${{ github.event.inputs.IMAGE_AUTHOR || 'antelle' }}
|
||||
IMAGE_VERSION: ${{ github.event.inputs.IMAGE_VERSION || '1.19.0' }}
|
||||
IMAGE_DOCKERHUB_USERNAME: ${{ github.event.inputs.IMAGE_DOCKERHUB_USERNAME || 'antelle' }}
|
||||
BOT_NAME_1: EuropaServ
|
||||
BOT_NAME_DEPENDABOT: dependabot[bot]
|
||||
|
||||
# #
|
||||
# Jobs
|
||||
#
|
||||
# The way pushed docker containers on Dockerhub work, the most recent image built goes at the top.
|
||||
# We will use the order below which builds the :latest image last so that it appears at the very
|
||||
# top of the packages page.
|
||||
# #
|
||||
|
||||
jobs:
|
||||
|
||||
# #
|
||||
# Job › Create Tag
|
||||
# #
|
||||
|
||||
job-docker-release-tags-create:
|
||||
name: >-
|
||||
📦 Release › Create Tag
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
steps:
|
||||
|
||||
# #
|
||||
# Release › Tags › Start
|
||||
# #
|
||||
|
||||
- name: '🏳️ Start'
|
||||
id: task_release_tags_start
|
||||
run: |
|
||||
echo "Creating Tag"
|
||||
|
||||
# #
|
||||
# Release › Tags › Checkout
|
||||
# #
|
||||
|
||||
- name: '✅ Checkout'
|
||||
id: task_release_tags_checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# #
|
||||
# Release › Tags › Fix Permissions
|
||||
# #
|
||||
|
||||
- name: '#️⃣ Manage Permissions'
|
||||
id: task_release_tags_permissions
|
||||
run: |
|
||||
find ./ -name 'run' -exec chmod 755 {} \;
|
||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
||||
if [ -n "${WRONG_PERM}" ]; then
|
||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
||||
for i in ${WRONG_PERM}; do
|
||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
||||
done
|
||||
exit 1
|
||||
else
|
||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
||||
fi
|
||||
|
||||
# #
|
||||
# Release › Tags › Create Tag
|
||||
#
|
||||
# only called in dispatch mode
|
||||
# #
|
||||
|
||||
- uses: rickstaa/action-create-tag@v1
|
||||
id: task_release_tags_create
|
||||
if: ( github.event_name != 'workflow_dispatch' && inputs.DRY_RUN == false )
|
||||
with:
|
||||
tag: "${{ env.IMAGE_VERSION }}"
|
||||
tag_exists_error: false
|
||||
message: '${{ env.IMAGE_NAME }}-${{ env.IMAGE_VERSION }}'
|
||||
gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }}
|
||||
gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }}
|
||||
|
||||
# #
|
||||
# Job › Docker Release › Dockerhub › Arm64
|
||||
# #
|
||||
|
||||
job-docker-release-dockerhub-arm64:
|
||||
name: >-
|
||||
📦 Release › Dockerhub › Arm64
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ job-docker-release-tags-create ]
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
steps:
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Start › Arm64
|
||||
# #
|
||||
|
||||
- name: '🏳️ Start'
|
||||
id: task_release_dh_start
|
||||
run: |
|
||||
echo "Starting Dockerhub arm64"
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Checkout › Arm64
|
||||
# #
|
||||
|
||||
- name: '✅ Checkout'
|
||||
id: task_release_dh_checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Install Dependencies
|
||||
# #
|
||||
|
||||
- name: '📦 Install Dependencies'
|
||||
id: task_release_dh_dependencies
|
||||
run:
|
||||
sudo apt-get install -qq dos2unix
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Execute dos2unix
|
||||
# #
|
||||
|
||||
- name: '🔐 Apply dos2unix'
|
||||
id: task_release_dh_dos2unix
|
||||
run: |
|
||||
echo "⚠️⚠️⚠️ Running DOS2UNIX ⚠️⚠️⚠️"
|
||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
||||
echo "✅✅✅ Completed DOS2UNIX ✅✅✅"
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Fix Permissions
|
||||
# #
|
||||
|
||||
- name: '#️⃣ Manage Permissions'
|
||||
id: task_release_dh_permissions
|
||||
run: |
|
||||
find ./ -name 'run' -exec chmod 755 {} \;
|
||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
||||
if [ -n "${WRONG_PERM}" ]; then
|
||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
||||
for i in ${WRONG_PERM}; do
|
||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
||||
done
|
||||
exit 1
|
||||
else
|
||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
||||
fi
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › QEMU › Arm64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Set up QEMU'
|
||||
id: task_release_dh_qemu
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Setup BuildX › Arm64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Setup Buildx'
|
||||
id: task_release_dh_buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
version: latest
|
||||
driver-opts: 'image=moby/buildkit:latest'
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Registry Login › Arm64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Login to Dockerhub'
|
||||
id: task_release_dh_registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ env.IMAGE_DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.IMAGE_DOCKERHUB_TOKEN }}
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Meta › Arm64
|
||||
# #
|
||||
|
||||
- name: '🔨 Dockerhub: Meta - Arm64'
|
||||
id: task_release_dh_meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
${{ env.IMAGE_AUTHOR }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
# latest no
|
||||
type=raw,value=latest,enable=false
|
||||
|
||||
# dispatch add x1.x.x-arm64
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-arm64,value=${{ env.IMAGE_VERSION }}
|
||||
|
||||
# dispatch add arm64-development
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-development,value=arm64
|
||||
|
||||
# tag add tag-arm64
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push' }},priority=600,prefix=,suffix=-arm64,event=tag
|
||||
flavor: |
|
||||
latest=false
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Checkpoint › Arm64
|
||||
# #
|
||||
|
||||
- name: '⚠️ Checkpoint'
|
||||
id: task_release_dh_checkpoint
|
||||
run: |
|
||||
echo "registry ............. Github"
|
||||
echo "github.actor.......... ${{ github.actor }}"
|
||||
echo "github.ref ........... ${{ github.ref }}"
|
||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
||||
echo "github.event_name .... ${{ github.event_name }}"
|
||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
||||
echo "env.AUTHOR ........... ${{ env.IMAGE_AUTHOR }}"
|
||||
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
||||
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Build and Push › Arm64
|
||||
# #
|
||||
|
||||
- name: '📦 Build & Push (linux/arm64)'
|
||||
id: task_release_dh_push
|
||||
uses: docker/build-push-action@v6
|
||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile.aarch64
|
||||
platforms: linux/arm64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
||||
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
||||
|
||||
# #
|
||||
# Job › Docker Release › Dockerhub › Amd64
|
||||
# #
|
||||
|
||||
job-docker-release-dockerhub-amd64:
|
||||
name: >-
|
||||
📦 Release › Dockerhub › Amd64
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
attestations: write
|
||||
id-token: write
|
||||
needs: [ job-docker-release-tags-create, job-docker-release-dockerhub-arm64 ]
|
||||
steps:
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Start › Amd64
|
||||
# #
|
||||
|
||||
- name: '🏳️ Start'
|
||||
id: task_release_dh_start
|
||||
run: |
|
||||
echo "Starting Dockerhub docker release"
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Checkout › Amd64
|
||||
# #
|
||||
|
||||
- name: '✅ Checkout'
|
||||
id: task_release_dh_checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Install Dependencies
|
||||
# #
|
||||
|
||||
- name: '📦 Install Dependencies'
|
||||
id: task_release_dh_dependencies
|
||||
run:
|
||||
sudo apt-get install -qq dos2unix
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Execute dos2unix
|
||||
# #
|
||||
|
||||
- name: '🔐 Apply dos2unix'
|
||||
id: task_release_dh_dos2unix
|
||||
run: |
|
||||
find ./ \( -path "./.git" -o -path "./docs" -o -path "./.github" -o -path "*.png" -o -path "*.jpg" \) -prune -o -name '*' -print | xargs dos2unix --
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Fix Permissions
|
||||
# #
|
||||
|
||||
- name: '#️⃣ Manage Permissions'
|
||||
id: task_release_dh_permissions
|
||||
run: |
|
||||
find ./ -name 'run' -exec chmod 755 {} \;
|
||||
WRONG_PERM=$(find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print)
|
||||
if [ -n "${WRONG_PERM}" ]; then
|
||||
echo "⚠️⚠️⚠️ Permissions are invalid ⚠️⚠️⚠️"
|
||||
for i in ${WRONG_PERM}; do
|
||||
echo "::error file=${i},line=1,title=Missing Executable Bit::This file needs to be set as executable!"
|
||||
done
|
||||
exit 1
|
||||
else
|
||||
echo "✅✅✅ Executable permissions are OK ✅✅✅"
|
||||
fi
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › QEMU › Amd64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Set up QEMU'
|
||||
id: task_release_dh_qemu
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Setup BuildX › Amd64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Setup Buildx'
|
||||
id: task_release_dh_buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
version: latest
|
||||
driver-opts: 'image=moby/buildkit:latest'
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Registry Login › Amd64
|
||||
# #
|
||||
|
||||
- name: '⚙️ Login to Dockerhub'
|
||||
id: task_release_dh_registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ env.IMAGE_DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.IMAGE_DOCKERHUB_TOKEN }}
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Meta › Amd64
|
||||
# #
|
||||
|
||||
- name: '🔨 Dockerhub: Meta - Amd64'
|
||||
id: task_release_dh_meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
${{ env.IMAGE_AUTHOR }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
# latest yes
|
||||
type=raw,value=latest,enable=${{ !inputs.DEV_RELEASE }}
|
||||
|
||||
# dispatch add x1.x.x-amd64
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == false }},priority=300,prefix=,suffix=-amd64,value=${{ env.IMAGE_VERSION }}
|
||||
|
||||
# dispatch add amd64-development
|
||||
type=raw,enable=${{ github.event_name == 'workflow_dispatch' && inputs.DEV_RELEASE == true }},priority=300,prefix=,suffix=-development,value=amd64
|
||||
|
||||
# tag add tag-arm64
|
||||
type=ref,enable=${{ github.event_name == 'pull_request' || github.event_name == 'push'}},priority=600,prefix=,suffix=-amd64,event=tag
|
||||
|
||||
# add development tag
|
||||
type=raw,enable=${{ inputs.DEV_RELEASE }},priority=400,prefix=,suffix=,value=development
|
||||
flavor: |
|
||||
latest=${{ !inputs.DEV_RELEASE }}
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Checkpoint › Amd64
|
||||
# #
|
||||
|
||||
- name: '⚠️ Checkpoint'
|
||||
id: task_release_dh_checkpoint
|
||||
run: |
|
||||
echo "registry ............. Github"
|
||||
echo "github.actor.......... ${{ github.actor }}"
|
||||
echo "github.ref ........... ${{ github.ref }}"
|
||||
echo "github.ref_name ...... ${{ github.ref_name }}"
|
||||
echo "github.event_name .... ${{ github.event_name }}"
|
||||
echo "inputs.DRY_RUN ....... ${{ inputs.DRY_RUN }}"
|
||||
echo "env.AUTHOR ........... ${{ env.IMAGE_AUTHOR }}"
|
||||
echo "tags ................. ${{ steps.task_release_dh_meta.outputs.tags }}"
|
||||
echo "labels ............... ${{ steps.task_release_dh_meta.outputs.labels }}"
|
||||
|
||||
# #
|
||||
# Release › Dockerhub › Build and Push › Amd64
|
||||
# #
|
||||
|
||||
- name: '📦 Build & Push (linux/amd64)'
|
||||
id: task_release_dh_push
|
||||
uses: docker/build-push-action@v6
|
||||
if: ( github.event_name == 'workflow_dispatch' && inputs.DRY_RUN == false ) || ( github.event_name == 'push' )
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile
|
||||
platforms: linux/amd64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.task_release_dh_meta.outputs.tags }}
|
||||
labels: ${{ steps.task_release_dh_meta.outputs.labels }}
|
||||
Reference in New Issue
Block a user