composite actions
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
name: Kaniko Build and Push
|
||||||
|
description: Build and push a Docker image to the Gitea registry using kaniko
|
||||||
|
inputs:
|
||||||
|
repo:
|
||||||
|
description: Gitea repository name to clone and build
|
||||||
|
required: true
|
||||||
|
image:
|
||||||
|
description: Image name in the registry (defaults to repo name)
|
||||||
|
required: false
|
||||||
|
default: ''
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Build and push
|
||||||
|
shell: sh
|
||||||
|
env:
|
||||||
|
REPO: ${{ inputs.repo }}
|
||||||
|
IMAGE: ${{ inputs.image }}
|
||||||
|
run: sh ${{ github.action_path }}/build.sh
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
IMAGE=${IMAGE:-$REPO}
|
||||||
|
JOB_NAME="build-${IMAGE}-${GITHUB_SHA:0:8}"
|
||||||
|
|
||||||
|
kubectl apply -f - <<EOF
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: ${JOB_NAME}
|
||||||
|
namespace: gitea-runner
|
||||||
|
spec:
|
||||||
|
ttlSecondsAfterFinished: 300
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
initContainers:
|
||||||
|
- name: git-clone
|
||||||
|
image: alpine/git
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- git clone --depth=1 https://\$GIT_USERNAME:\$GIT_PASSWORD@gitea.saltysoup.dev/tanner/${REPO}.git /workspace
|
||||||
|
env:
|
||||||
|
- name: GIT_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: gitea-git-credentials
|
||||||
|
key: username
|
||||||
|
- name: GIT_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: gitea-git-credentials
|
||||||
|
key: password
|
||||||
|
volumeMounts:
|
||||||
|
- name: workspace
|
||||||
|
mountPath: /workspace
|
||||||
|
containers:
|
||||||
|
- name: kaniko
|
||||||
|
image: gcr.io/kaniko-project/executor:latest
|
||||||
|
args:
|
||||||
|
- --dockerfile=/workspace/Dockerfile
|
||||||
|
- --context=dir:///workspace
|
||||||
|
- --destination=gitea.saltysoup.dev/tanner/${IMAGE}:${GITHUB_SHA}
|
||||||
|
- --destination=gitea.saltysoup.dev/tanner/${IMAGE}:latest
|
||||||
|
- --skip-tls-verify-registry=gitea.saltysoup.dev
|
||||||
|
- --snapshot-mode=redo
|
||||||
|
- --compressed-caching=false
|
||||||
|
volumeMounts:
|
||||||
|
- name: workspace
|
||||||
|
mountPath: /workspace
|
||||||
|
- name: registry-auth
|
||||||
|
mountPath: /kaniko/.docker/config.json
|
||||||
|
subPath: .dockerconfigjson
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: workspace
|
||||||
|
emptyDir: {}
|
||||||
|
- name: registry-auth
|
||||||
|
secret:
|
||||||
|
secretName: kaniko-registry-auth
|
||||||
|
restartPolicy: Never
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Waiting for ${JOB_NAME}..."
|
||||||
|
while true; do
|
||||||
|
COMPLETE=$(kubectl get job ${JOB_NAME} -n gitea-runner -o jsonpath='{.status.completionTime}' 2>/dev/null)
|
||||||
|
FAILED=$(kubectl get job ${JOB_NAME} -n gitea-runner -o jsonpath='{.status.failed}' 2>/dev/null)
|
||||||
|
if [ -n "$COMPLETE" ]; then
|
||||||
|
echo "Build succeeded"
|
||||||
|
kubectl delete job ${JOB_NAME} -n gitea-runner --ignore-not-found
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ "${FAILED:-0}" -ge 1 ]; then
|
||||||
|
echo "Build failed, logs:"
|
||||||
|
kubectl logs -n gitea-runner -l job-name=${JOB_NAME} -c kaniko --tail=100 || true
|
||||||
|
kubectl delete job ${JOB_NAME} -n gitea-runner --ignore-not-found
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 15
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user