Add Gitea Actions workflow (migrated from Jenkins)
CI and Deploy / build-and-deploy (push) Blocked by required conditions
CI and Deploy / full-e2e (push) Blocked by required conditions
CI and Deploy / ci-gate (push) Has started running

This commit is contained in:
2026-06-01 16:35:25 +08:00
parent 00683e51c4
commit f2eb3f5cb1
+121
View File
@@ -0,0 +1,121 @@
name: CI and Deploy
on:
push:
branches: [main]
workflow_dispatch:
inputs:
run_full_e2e:
description: 'Run full E2E tests after deploy'
type: boolean
default: false
run_coverage:
description: 'Run coverage tests'
type: boolean
default: false
jobs:
ci-gate:
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.51.1-jammy
options: -v /var/run/docker.sock:/var/run/docker.sock --ipc=host
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Cache npm
uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: npm-
- name: Install dependencies
run: npm ci
- name: Generate Prisma client
run: npx prisma generate
- name: Lint
run: npm run lint
- name: Unit tests
run: |
if [ "${{ inputs.run_coverage }}" = "true" ]; then
npm run test:coverage
else
npm run test
fi
- name: Smoke E2E tests
run: |
npx playwright install chromium
npm run test:e2e:smoke
build-and-deploy:
needs: ci-gate
runs-on: ubuntu-latest
container:
options: -v /var/run/docker.sock:/var/run/docker.sock
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build Docker image
run: |
docker build \
--build-arg NEXT_PUBLIC_AMAP_API_KEY="${{ secrets.AMAP_API_KEY }}" \
-t no-whatever:latest \
-t no-whatever:${{ github.sha }} \
.
- name: Deploy
run: |
docker stop no-whatever || true
docker rm no-whatever || true
mkdir -p /data/no-whatever
chown 1001:1001 /data/no-whatever
docker run -d \
--name no-whatever \
--network nginx \
-p 3721:3721 \
-v /data/no-whatever:/app/data \
-e DATABASE_URL=file:/app/data/prod.db \
-e AMAP_API_KEY="${{ secrets.AMAP_API_KEY }}" \
-e DEEPSEEK_API_KEY="${{ secrets.DEEPSEEK_API_KEY }}" \
--restart unless-stopped \
no-whatever:latest
full-e2e:
needs: build-and-deploy
if: ${{ inputs.run_full_e2e }}
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.51.1-jammy
options: --ipc=host
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Full E2E tests
run: |
npx prisma generate
npx playwright install chromium
npm run test:e2e