Files
testsite/.gitea/workflows/flow.yml
T
rlabadmin dde3f49571
Build & Deploy / build (push) Failing after 2s
Build & Deploy / deploy (push) Has been skipped
Run build job in docker:27-cli container with host socket mount
act_runner spawns an ephemeral container per job; the default image
lacks the docker CLI and cannot reach the host's Docker daemon. Use
the official docker:27-cli image and bind-mount /var/run/docker.sock
so docker build/push target the host engine.

Requires runner config.yaml to include /var/run/docker.sock in
container.valid_volumes; otherwise the mount is rejected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 14:29:43 +02:00

95 lines
3.3 KiB
YAML

# .gitea/workflows/flow.yml
# =============================================================
# serso — generic CI/CD flow
# Copy into any app repo as .gitea/workflows/flow.yml
# Adjust the env block (STACK_NAME, SERVICE_NAME, APP_DOMAIN) per app
# =============================================================
name: Build & Deploy
on:
push:
branches:
- main
workflow_dispatch:
env:
# ─── Registry ─────────────────────────────────────────────
REGISTRY: git.dev.serso.org
IMAGE: ${{ github.repository }} # → owner/reponame
# ─── Per-app knobs (edit these) ───────────────────────────
STACK_NAME: testwebsite # Swarm stack name
SERVICE_NAME: testwebsite_web # {stack}_{service}
APP_DOMAIN: testwebsite.dev.serso.org # used only for logging
jobs:
# ============================================================
# 1. Build image + push to Gitea registry
# ============================================================
build:
runs-on: ubuntu-latest
container:
image: docker:27-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
outputs:
image_tag: ${{ steps.meta.outputs.tag }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Compute tag
id: meta
run: echo "tag=${{ github.sha }}" >> $GITHUB_OUTPUT
- name: Log in to Gitea registry
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | \
docker login ${{ env.REGISTRY }} \
--username "${{ github.actor }}" \
--password-stdin
- name: Build image
run: |
docker build \
-t ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ steps.meta.outputs.tag }} \
-t ${{ env.REGISTRY }}/${{ env.IMAGE }}:latest \
.
- name: Push image
run: |
docker push ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ steps.meta.outputs.tag }}
docker push ${{ env.REGISTRY }}/${{ env.IMAGE }}:latest
# ============================================================
# 2. Deploy to Swarm (rolling update)
# ============================================================
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Prepare SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
- name: Rolling deploy on Swarm
run: |
ssh -i ~/.ssh/deploy_key \
${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} \
"docker service update \
--image ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ needs.build.outputs.image_tag }} \
--with-registry-auth \
--update-order start-first \
--update-failure-action rollback \
${{ env.SERVICE_NAME }}"
- name: Deployed 🎉
run: |
echo "App deployed at https://${{ env.APP_DOMAIN }}"
echo "Image: ${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ needs.build.outputs.image_tag }}"