Image mdcx-builtin-webtop-base CI #279
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Image mdcx-builtin-webtop-base CI | |
on: | |
push: | |
branches: | |
- none | |
workflow_run: | |
workflows: [Image build-mdcx CI] | |
types: [completed] | |
branches: [main] | |
workflow_dispatch: | |
inputs: | |
stage: | |
description: Stage | |
type: choice | |
default: dev | |
options: | |
- dev | |
- prod | |
baseImage: | |
description: Tag of base image `webtop-base` | |
type: choice | |
default: 'latest' | |
options: | |
- 'ubuntu-kde-22.04' | |
- 'latest' | |
binTag: | |
description: Tag of app bin image | |
default: 'latest' | |
env: | |
IMAGE_BASE: webtop-base | |
IMAGE_KEY: mdcx-builtin-webtop-base | |
APT_SOURCE_HOST: '' | |
ENABLE_TG_NOTIFICATION: ${{ secrets.ENABLE_TG_NOTIFICATION }} | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
# 如果是workflow_run(即Image build-mdcx CI)触发的,只有当上游workflow成功时才运行 | |
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v3 | |
- | |
name: Prepare build info | |
id: buildInfo | |
run: | | |
STAGE=${{ github.event.inputs.stage }} | |
STAGE=${STAGE:-dev} | |
BIN_TAG=${{ github.event.inputs.binTag }} | |
BIN_TAG=${BIN_TAG:-latest} | |
BASE_IMAGE_TAG=${{ github.event.inputs.baseImage }} | |
BASE_IMAGE_TAG=${BASE_IMAGE_TAG:-latest} | |
if [[ "${{ github.event_name }}" == "workflow_run" && "${{ github.ref_name }}" == "main" ]]; then | |
STAGE=prod | |
BIN_TAG=latest | |
BASE_IMAGE_TAG=latest | |
fi | |
echo "STAGE=$STAGE" >> $GITHUB_OUTPUT | |
echo "BIN_TAG=$BIN_TAG" >> $GITHUB_OUTPUT | |
echo "BASE_IMAGE_TAG=$BASE_IMAGE_TAG" >> $GITHUB_OUTPUT | |
if [[ "${{ github.event_name }}" == "workflow_run" ]]; then | |
sleep 10 | |
fi | |
- | |
name: Prepare App info | |
id: appInfo | |
run: | | |
APP_IMAGE="${{ secrets.DOCKERHUB_USERNAME }}/build-mdcx:${{ steps.buildInfo.outputs.BIN_TAG }}" | |
APP_VERSION=$(docker run --rm $APP_IMAGE cat /app-version) | |
if [[ -z "$APP_VERSION" ]]; then | |
echo "❌ Failed to get app version from app bin image!" | |
exit 1 | |
fi | |
echo "APP_VERSION=$APP_VERSION" >> $GITHUB_OUTPUT | |
- | |
name: Prepare Version Values | |
uses: cardinalby/export-env-action@v2 | |
id: versions | |
with: | |
envFile: '.env.versions' | |
export: 'false' | |
- | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- | |
name: Login to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- | |
name: Produce docker image tags and other information | |
id: imageInfo | |
run: | | |
if [[ "${{ steps.buildInfo.outputs.STAGE }}" == "dev" ]]; then | |
echo "latest=latest-dev" >> $GITHUB_OUTPUT | |
echo "version=${{ steps.appInfo.outputs.APP_VERSION }}-dev" >> $GITHUB_OUTPUT | |
else | |
echo "latest=latest" >> $GITHUB_OUTPUT | |
echo "version=${{ steps.appInfo.outputs.APP_VERSION }}" >> $GITHUB_OUTPUT | |
fi | |
- | |
name: Build and push | |
id: buildAndPush | |
uses: docker/build-push-action@v3 | |
with: | |
context: . | |
# cache-from: type=gha | |
# cache-to: type=gha,mode=min | |
file: ${{ env.IMAGE_BASE }}/Dockerfile.${{ env.IMAGE_KEY }} | |
build-args: | | |
APT_SOURCE_HOST=${{ env.APT_SOURCE_HOST }} | |
BASE_IMAGE_TAG=${{ steps.buildInfo.outputs.BASE_IMAGE_TAG }} | |
APP_VERSION=${{ steps.appInfo.outputs.APP_VERSION }} | |
MDCX_BIN_IMAGE_TAG=${{ steps.buildInfo.outputs.BIN_TAG }} | |
platforms: | | |
linux/amd64 | |
linux/arm64 | |
push: true | |
tags: | | |
${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_KEY }}:${{ steps.imageInfo.outputs.latest }} | |
${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_KEY }}:${{ steps.imageInfo.outputs.version }} | |
- | |
name: TG Notification | |
uses: appleboy/telegram-action@master | |
if: ${{ env.ENABLE_TG_NOTIFICATION == 'true' }} | |
with: | |
to: ${{ secrets.TELE_CHAT_ID }} | |
token: ${{ secrets.TELE_BOT_TOKEN }} | |
message: | | |
🎉 Workflow: ${{ github.workflow }} is completed! | |
🔘 Stage: ${{ github.event.inputs.stage }} | |
📦 Dockerfile: ${{ env.IMAGE_BASE }}/Dockerfile.${{ env.IMAGE_KEY }} | |
📦 Build Args: | |
APT_SOURCE_HOST=${{ env.APT_SOURCE_HOST }} | |
BASE_IMAGE_TAG=${{ steps.buildInfo.outputs.BASE_IMAGE_TAG }} | |
APP_VERSION=${{ steps.appInfo.outputs.APP_VERSION }} | |
MDCX_BIN_IMAGE_TAG=${{ steps.buildInfo.outputs.BIN_TAG }} | |
📦 Image: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_KEY }} | |
📦 Tags: ${{ steps.imageInfo.outputs.latest }}, ${{ steps.imageInfo.outputs.version }} | |
📦 ImageId: ${{ steps.buildAndPush.outputs.imageid }} | |
📦 Digest: ${{ steps.buildAndPush.outputs.digest }} |