apiVersion: ankra.io/v1
kind: Pipeline
metadata:
name: "shop"
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
concurrency:
group: "${{ ankra.repository.provider }}:${{ ankra.repository.owner }}/${{ ankra.repository.name }}-${{ ankra.ref }}"
cancel_in_progress: true
defaults:
timeout: "30m"
network: "egress-https"
path_sets:
pipeline: [".ankra/**"]
web: ["web/**", "packages/**", "pnpm-lock.yaml", { set: pipeline }]
api: ["api/**", "libs/**", "go.work", { set: pipeline }]
stages:
- name: "checkout"
kind: "checkout"
- name: "test-web"
kind: "run"
image: "node:24"
needs: ["checkout"]
affected:
pnpm: ["@acme/web"]
env:
PNPM_STORE_DIR: "/workspace/.ankra-node-cache-web/pnpm-store"
run: |
corepack enable
pnpm install --frozen-lockfile --store-dir "$PNPM_STORE_DIR"
pnpm --filter @acme/web... test
cache:
- key: "pnpm-${{ hashFiles('pnpm-lock.yaml') }}"
paths: [".ankra-node-cache-web/pnpm-store"]
restore_keys: ["pnpm-"]
fallback: "none"
- name: "test-api"
kind: "run"
image: "golang:1.26"
needs: ["checkout"]
working_directory: "api"
affected:
go: ["./..."]
paths: ["migrations/**"]
env:
GOMODCACHE: "/workspace/.ankra-go-api/mod"
GOCACHE: "/workspace/.ankra-go-api/cache"
run: "go test ./..."
cache:
- key: "go-${{ hashFiles('api/go.mod', 'api/go.sum') }}"
paths: [".ankra-go-api/mod", ".ankra-go-api/cache"]
restore_keys: ["go-"]
fallback: "none"
- name: "build-web"
kind: "build"
needs: ["test-web"]
when:
paths: [{ set: web }]
build:
context: "web"
dockerfile: "web/Dockerfile"
- name: "scan-web"
kind: "scan"
needs: ["build-web"]
working_directory: "web"
scan:
scanners: ["semgrep", "trivy"]
- name: "gate-web"
kind: "gate"
needs: ["scan-web"]
gate:
require_stages: ["scan-web"]
- name: "publish-web"
kind: "publish"
needs: ["gate-web"]
when:
events: ["push"]
- name: "build-api"
kind: "build"
needs: ["test-api"]
when:
paths: [{ set: api }]
build:
context: "api"
dockerfile: "api/Dockerfile"
- name: "scan-api"
kind: "scan"
needs: ["build-api"]
working_directory: "api"
scan:
scanners: ["semgrep", "trivy"]
- name: "gate-api"
kind: "gate"
needs: ["scan-api"]
gate:
require_stages: ["scan-api"]
- name: "publish-api"
kind: "publish"
needs: ["gate-api"]
when:
events: ["push"]