captains-log/.forgejo/workflows/ci.yml
Drew Galbraith 1b3dfef45b
Some checks failed
Check / Build and Push Backend Image (pull_request) Has been skipped
Check / Backend (pull_request) Failing after 2m24s
Check / Frontend (pull_request) Failing after 2m0s
Check / Build and Push Frontend Image (pull_request) Has been skipped
Add a docker build step.
2025-09-27 21:27:16 -07:00

167 lines
4.5 KiB
YAML

name: Check
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
# Should speed up builds.
CARGO_INCREMENTAL: 0
# Should reduce the size of ./target to improve cache load/store.
CARGO_PROFILE_TEST_DEBUG: 0
jobs:
check-backend:
name: Backend
runs-on: docker
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Install Rust
uses: https://codeberg.org/wackbyte/rust-toolchain@trunk
with:
toolchain: stable
components: rustfmt, clippy
- name: Cache
uses: https://github.com/Swatinem/rust-cache@v2
with:
# Don't cache ~/.cargo/bin since we restore the cache after we install things there
cache-bin: "false"
workspaces: "backend"
- name: "Check Format"
run: cargo fmt --check
working-directory: backend
- name: "Build"
run: |
# hurl needs libxml needs libclang
apt update && apt install -y clang
cargo build --tests --locked
working-directory: backend
- name: "Lint"
run: |
rustup component add clippy
cargo clippy --locked
working-directory: backend
- name: "Unit Tests"
run: |
cargo test --locked -- --skip api
working-directory: backend
- name: "Integration Tests"
run: cargo test --locked --test api
working-directory: backend
check-frontend:
name: Frontend
runs-on: docker
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
cache: "npm"
cache-dependency-path: 'frontend/package-lock.json'
node-version: '20'
- name: Install dependencies
run: npm ci
working-directory: frontend
- name: Check Format
run: "npm run format:check"
working-directory: frontend
- name: Lint
run: npm run lint
working-directory: frontend
- name: Typecheck
run: npm run typecheck
working-directory: frontend
- name: Test
run: npm run test
working-directory: frontend
docker-backend:
name: Build and Push Backend Image
runs-on: docker
needs: [check-backend]
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout Repo
uses: https://github.com/actions/checkout@v4
- name: Set up Docker Buildx
uses: https://github.com/docker/setup-buildx-action@v3
- name: Login to Forgejo Container Registry
uses: https://github.com/docker/login-action@v3
with:
registry: ${{ gitea.server_url }}
username: ${{ gitea.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: https://github.com/docker/metadata-action@v5
with:
images: ${{ gitea.server_url }}/${{ gitea.repository }}/backend
tags: |
type=ref,event=branch
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push image
uses: https://github.com/docker/build-push-action@v5
with:
context: ./backend
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
docker-frontend:
name: Build and Push Frontend Image
runs-on: docker
needs: [check-frontend]
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout Repo
uses: https://github.com/actions/checkout@v4
- name: Set up Docker Buildx
uses: https://github.com/docker/setup-buildx-action@v3
- name: Login to Forgejo Container Registry
uses: https://github.com/docker/login-action@v3
with:
registry: ${{ gitea.server_url }}
username: ${{ gitea.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: https://github.com/docker/metadata-action@v5
with:
images: ${{ gitea.server_url }}/${{ gitea.repository }}/frontend
tags: |
type=ref,event=branch
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push image
uses: https://github.com/docker/build-push-action@v5
with:
context: ./frontend
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max