feat: first try on docker buildx
parent
f8eefa31fe
commit
f33c9968c3
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
SHA=$(git rev-parse HEAD)
|
||||||
|
REPO_NAME=yuhao1118/base
|
||||||
|
API_REPO_NAME="${REPO_NAME}"
|
||||||
|
|
||||||
|
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
|
||||||
|
REFSPEC=$(echo "${GITHUB_HEAD_REF}" | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
|
||||||
|
PR_NUM=$(echo "${GITHUB_REF}" | sed 's:refs/pull/::' | sed 's:/merge::')
|
||||||
|
LATEST_TAG="pr-${PR_NUM}"
|
||||||
|
CACHE_FROM_TAG="latest"
|
||||||
|
elif [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
|
||||||
|
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/tags/::' | head -c 40)
|
||||||
|
LATEST_TAG="${REFSPEC}"
|
||||||
|
CACHE_FROM_TAG="latest"
|
||||||
|
else
|
||||||
|
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
|
||||||
|
LATEST_TAG="${REFSPEC}"
|
||||||
|
CACHE_FROM_TAG="${REFSPEC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${REFSPEC}" == "main" ]]; then
|
||||||
|
LATEST_TAG="latest"
|
||||||
|
CACHE_FROM_TAG="latest"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Pulling cache image ${API_REPO_NAME}:${CACHE_FROM_TAG}"
|
||||||
|
if docker pull "${API_REPO_NAME}:${CACHE_FROM_TAG}"; then
|
||||||
|
API_CACHE_FROM_SCRIPT="--cache-from ${API_REPO_NAME}:${CACHE_FROM_TAG}"
|
||||||
|
else
|
||||||
|
echo "WARNING: Failed to pull ${API_REPO_NAME}:${CACHE_FROM_TAG}, disable build image cache."
|
||||||
|
API_CACHE_FROM_SCRIPT=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
cat<<EOF
|
||||||
|
Rolling with tags:
|
||||||
|
- ${API_REPO_NAME}:${SHA}
|
||||||
|
- ${API_REPO_NAME}:${REFSPEC}
|
||||||
|
- ${API_REPO_NAME}:${LATEST_TAG}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
#
|
||||||
|
# Build image
|
||||||
|
#
|
||||||
|
cd docker
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
||||||
|
${API_CACHE_FROM_SCRIPT} \
|
||||||
|
--build-arg COMMIT_SHA=${SHA} \
|
||||||
|
-t "${API_REPO_NAME}:${SHA}" \
|
||||||
|
-t "${API_REPO_NAME}:${REFSPEC}" \
|
||||||
|
-t "${API_REPO_NAME}:${LATEST_TAG}" \
|
||||||
|
--label "sha=${SHA}" \
|
||||||
|
--label "built_at=$(date)" \
|
||||||
|
--label "build_actor=${GITHUB_ACTOR}" \
|
||||||
|
. \
|
||||||
|
-f Dockfile.base
|
||||||
|
|
||||||
|
# push
|
||||||
|
docker push --all-tags "${API_REPO_NAME}"
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
name: Build and Push Base Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event.pull_request.draft == false
|
||||||
|
steps:
|
||||||
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
/bin/bash .github/workflows/build-base-image.sh
|
||||||
|
|
||||||
|
- name: Deploy to server
|
||||||
|
if: github.ref == 'refs/heads/deploy/dev'
|
||||||
|
uses: appleboy/ssh-action@v0.1.8
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SSH_HOST }}
|
||||||
|
username: ${{ secrets.SSH_USER }}
|
||||||
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
script: |
|
||||||
|
${{ secrets.SSH_SCRIPT }}
|
||||||
Loading…
Reference in New Issue