79 lines
2.7 KiB
YAML
79 lines
2.7 KiB
YAML
name: Build and Deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: "1.25"
|
|
|
|
- name: Check formatting
|
|
run: |
|
|
unformatted=$(gofmt -l .)
|
|
if [ -n "$unformatted" ]; then
|
|
echo "Unformatted files:"
|
|
echo "$unformatted"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Build
|
|
run: CGO_ENABLED=0 go build -o podstalk .
|
|
|
|
- name: Run tests
|
|
run: go test ./...
|
|
|
|
- name: Login to Gitea Container Registry
|
|
env:
|
|
CONTAINER_REGISTRY_TOKEN: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}
|
|
run: |
|
|
if [ -z "$CONTAINER_REGISTRY_TOKEN" ]; then
|
|
echo "CONTAINER_REGISTRY_TOKEN not set, skipping Docker publish"
|
|
exit 0
|
|
fi
|
|
echo "$CONTAINER_REGISTRY_TOKEN" | docker login git.roo.lol -u ${{ github.actor }} --password-stdin
|
|
|
|
- name: Build and push Docker image
|
|
env:
|
|
CONTAINER_REGISTRY_TOKEN: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}
|
|
run: |
|
|
if [ -z "$CONTAINER_REGISTRY_TOKEN" ]; then
|
|
echo "CONTAINER_REGISTRY_TOKEN not set, skipping Docker publish"
|
|
exit 0
|
|
fi
|
|
docker build \
|
|
-t git.roo.lol/${{ github.repository }}:latest \
|
|
-t git.roo.lol/${{ github.repository }}:${{ github.sha }} \
|
|
.
|
|
docker push git.roo.lol/${{ github.repository }}:latest
|
|
docker push git.roo.lol/${{ github.repository }}:${{ github.sha }}
|
|
|
|
- name: Deploy to production
|
|
env:
|
|
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
|
|
DEPLOY_USER: ${{ vars.DEPLOY_USER }}
|
|
DEPLOY_HOST: ${{ vars.DEPLOY_HOST }}
|
|
DEPLOY_DIRECTORY: ${{ vars.DEPLOY_DIRECTORY }}
|
|
run: |
|
|
if [ -z "$DEPLOY_KEY" ] || [ -z "$DEPLOY_USER" ] || [ -z "$DEPLOY_HOST" ] || [ -z "$DEPLOY_DIRECTORY" ]; then
|
|
[ -z "$DEPLOY_KEY" ] && echo "MISSING SECRET: DEPLOY_KEY"
|
|
[ -z "$DEPLOY_USER" ] && echo "MISSING VAR: DEPLOY_USER"
|
|
[ -z "$DEPLOY_HOST" ] && echo "MISSING VAR: DEPLOY_HOST"
|
|
[ -z "$DEPLOY_DIRECTORY" ] && echo "MISSING VAR: DEPLOY_DIRECTORY"
|
|
echo "Deploy secrets not fully set, skipping deployment"
|
|
exit 0
|
|
fi
|
|
mkdir -p ~/.ssh
|
|
echo "$DEPLOY_KEY" > ~/.ssh/deploy_key
|
|
chmod 600 ~/.ssh/deploy_key
|
|
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" \
|
|
"cd $DEPLOY_DIRECTORY && docker compose pull && docker compose down && docker compose up -d"
|