171 lines
5.6 KiB
YAML
171 lines
5.6 KiB
YAML
# Pipeline Gitea Actions pour Kazier — lint + test + build + image registre.
|
|
#
|
|
# Prérequis act_runner (une seule fois) :
|
|
# - Runner act_runner enregistré contre l'instance Gitea, labels `ubuntu-24.04` dispo.
|
|
# - Executor docker : privilégié (jobs docker:dind + containers) — sinon le
|
|
# job `docker` et le service `dind` échouent.
|
|
# - Gitea app.ini : [actions] ENABLED=true, DEFAULT_ACTIONS_URL=https://github.com
|
|
# - Droits d'écriture du runner sur son répertoire de travail/cache.
|
|
#
|
|
# Secrets (Settings > Actions) :
|
|
# - CONTAINER_REGISTRY_TOKEN PAT scope write:packages (registre conteneur)
|
|
# - CONTAINER_REGISTRY_USER utilisateur propriétaire du PAT ci-dessus
|
|
|
|
name: CI
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
tags: ["v*"]
|
|
pull_request:
|
|
|
|
env:
|
|
GO_VERSION: "1.26"
|
|
ANDROID_IMAGE: cimg/android:2024.01
|
|
CGO_ENABLED: "0"
|
|
# Registre conteneur Gitea (ex: cname de l'instance)
|
|
REGISTRY_HOST: gitea.thirdshop.fr
|
|
|
|
jobs:
|
|
lint-backend:
|
|
runs-on: ubuntu-24.04
|
|
container: golang:${{ env.GO_VERSION }}-alpine
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
/go/pkg/mod
|
|
~/.cache/go-build
|
|
key: go-${{ runner.os }}-${{ hashFiles('backend/go.sum') }}
|
|
restore-keys: |
|
|
go-${{ runner.os }}-
|
|
|
|
- run: go mod download
|
|
working-directory: backend
|
|
- run: go vet ./...
|
|
working-directory: backend
|
|
- run: go install honnef.co/go/tools/cmd/staticcheck@latest && staticcheck ./...
|
|
working-directory: backend
|
|
|
|
lint-mobile:
|
|
runs-on: ubuntu-24.04
|
|
container: ${{ env.ANDROID_IMAGE }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('mobile-kotlin/gradle/libs.versions.toml') }}
|
|
restore-keys: |
|
|
gradle-${{ runner.os }}-
|
|
- run: ./gradlew :app:lint -q
|
|
working-directory: mobile-kotlin
|
|
|
|
test-backend:
|
|
runs-on: ubuntu-24.04
|
|
container: golang:${{ env.GO_VERSION }}-alpine
|
|
services:
|
|
postgres:
|
|
image: postgres:17-alpine
|
|
env:
|
|
POSTGRES_DB: kazier_test
|
|
POSTGRES_USER: kazier
|
|
POSTGRES_PASSWORD: kazier
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
/go/pkg/mod
|
|
~/.cache/go-build
|
|
key: go-${{ runner.os }}-${{ hashFiles('backend/go.sum') }}
|
|
restore-keys: |
|
|
go-${{ runner.os }}-
|
|
- run: go test ./...
|
|
working-directory: backend
|
|
env:
|
|
TEST_DATABASE_URL: postgres://kazier:kazier@postgres:5432/kazier_test?sslmode=disable
|
|
|
|
test-mobile:
|
|
runs-on: ubuntu-24.04
|
|
container: ${{ env.ANDROID_IMAGE }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('mobile-kotlin/gradle/libs.versions.toml') }}
|
|
restore-keys: |
|
|
gradle-${{ runner.os }}-
|
|
- run: ./gradlew :app:testDebugUnitTest -q
|
|
working-directory: mobile-kotlin
|
|
|
|
build-backend:
|
|
runs-on: ubuntu-24.04
|
|
container: golang:${{ env.GO_VERSION }}-alpine
|
|
needs: [lint-backend, test-backend]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- run: |
|
|
export VERSION="$(cat VERSION)"
|
|
CGO_ENABLED=0 GOOS=ubuntu-24.04 go build \
|
|
-trimpath \
|
|
-ldflags "-s -w -X main.version=${VERSION}" \
|
|
-o bin/kazier-server \
|
|
cmd/server/main.go
|
|
./bin/kazier-server --version
|
|
working-directory: backend
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: kazier-server
|
|
path: backend/bin/kazier-server
|
|
if-no-files-found: error
|
|
|
|
docker:
|
|
runs-on: ubuntu-24.04
|
|
needs: [build-backend]
|
|
# Push branches uniquement : pas sur PR (pas de build d'image à la review),
|
|
# pas sur tag (c'est release.yml qui construit, évite une course dans le
|
|
# registre entre le job `docker` et `release-docker`).
|
|
if: github.event_name == 'push' && github.ref_type == 'branch'
|
|
container:
|
|
image: docker:27
|
|
env:
|
|
DOCKER_HOST: tcp://docker:2375
|
|
DOCKER_TLS_CERTDIR: ""
|
|
services:
|
|
docker:
|
|
image: docker:27-dind
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Login registre Gitea
|
|
env:
|
|
CONTAINER_REGISTRY_TOKEN: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}
|
|
CONTAINER_REGISTRY_USER: ${{ secrets.CONTAINER_REGISTRY_USER }}
|
|
run: |
|
|
: "${CONTAINER_REGISTRY_TOKEN:?CONTAINER_REGISTRY_TOKEN manquant (PAT scope write:packages)}"
|
|
: "${CONTAINER_REGISTRY_USER:?CONTAINER_REGISTRY_USER manquant (propriétaire du PAT)}"
|
|
echo "$CONTAINER_REGISTRY_TOKEN" | docker login "$REGISTRY_HOST" -u "$CONTAINER_REGISTRY_USER" --password-stdin
|
|
echo "REGISTRY_IMAGE=${REGISTRY_HOST}/${{ github.repository_owner }}/kasier" >> "$GITHUB_ENV"
|
|
echo "IMAGE_TAG=${GITHUB_REF_NAME}" >> "$GITHUB_ENV"
|
|
|
|
- name: Build + push (registre Gitea)
|
|
run: |
|
|
docker build \
|
|
--build-arg VERSION="$(cat VERSION)" \
|
|
--build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
-t "$REGISTRY_IMAGE:$IMAGE_TAG" \
|
|
./backend
|
|
docker push "$REGISTRY_IMAGE:$IMAGE_TAG"
|
|
docker run --rm "$REGISTRY_IMAGE:$IMAGE_TAG" --version |