2026-03-11 00:59:49 +08:00

58 lines
1.9 KiB
YAML

name: Build and Publish Deb Package
on:
push:
tags: ["v*"]
jobs:
build:
runs-on: self-hosted
steps:
- name: Build and publish
env:
KUBECONFIG_B64: ${{ secrets.KUBECONFIG }}
run: |
set -euo pipefail
# Checkout
WORKDIR=$(mktemp -d)
cd "$WORKDIR"
git clone "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git" src
cd src
git checkout "$GITHUB_SHA"
# Build .deb
VERSION="${GITHUB_REF_NAME#v}"
PKG_NAME="${GITHUB_REPOSITORY##*/}"
echo "Building ${PKG_NAME} version ${VERSION}"
sed -i "s/^Version:.*/Version: ${VERSION}/" debian/control
mv debian DEBIAN
DEB_NAME="${PKG_NAME}_${VERSION}_amd64.deb"
dpkg-deb --build --root-owner-group . "${WORKDIR}/${DEB_NAME}"
echo "Built ${DEB_NAME}"
# Setup kubeconfig
mkdir -p ~/.kube
echo "$KUBECONFIG_B64" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
# Install kubectl if needed
if ! command -v kubectl &>/dev/null; then
curl -sLO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
fi
# Publish to repo
POD=$(kubectl get pod -n pkg-repo -l app=pkg-repo -o jsonpath='{.items[0].metadata.name}')
kubectl cp "${WORKDIR}/${DEB_NAME}" "pkg-repo/${POD}:/incoming/${DEB_NAME}" -c reprepro
kubectl exec -n pkg-repo "${POD}" -c reprepro -- \
reprepro -b /repo/debian includedeb trixie "/incoming/${DEB_NAME}"
kubectl exec -n pkg-repo "${POD}" -c reprepro -- \
rm -f "/incoming/${DEB_NAME}"
# Cleanup
rm -rf "$WORKDIR" ~/.kube/config
echo "Published ${DEB_NAME} to repo.n0ball.tw"