Skip to content

Add an in-app Recent activity feed for hotkey-triggered actions #8

Add an in-app Recent activity feed for hotkey-triggered actions

Add an in-app Recent activity feed for hotkey-triggered actions #8

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Lints and builds frontend/dist once; Go jobs below need frontend/dist
# present (main.go embeds it via //go:embed all:frontend/dist), so they
# download it instead of rebuilding it redundantly per job/OS.
frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- run: npm ci
working-directory: frontend
- run: npm run lint
working-directory: frontend
- run: npm run test
working-directory: frontend
- run: npm run build
working-directory: frontend
- uses: actions/upload-artifact@v7
with:
name: frontend-dist
path: frontend/dist
retention-days: 1
lint-go:
runs-on: ubuntu-latest
needs: frontend
env:
# Same reason as build-go's ubuntu-latest entry: without this,
# golangci-lint's own package-loading step needs cgo + X11 dev
# headers for internal/adapters/hotkey's desktop-tagged file.
# Real failure the first time this ran in actual CI, not caught
# locally beforehand -- golangci-lint-action has no CGO_ENABLED
# input, hence the job-level env instead.
CGO_ENABLED: '0'
steps:
- uses: actions/checkout@v7
- uses: actions/download-artifact@v8
with:
name: frontend-dist
path: frontend/dist
- uses: actions/setup-go@v7
with:
go-version: '1.25'
cache: true
- uses: golangci/golangci-lint-action@v9
with:
version: v2.12
args: --build-tags=server
build-go:
needs: frontend
strategy:
matrix:
include:
# macOS: desktop build (default tags) — primary target, per SPEC.md.
# Needs Xcode CLI tools for the hotkey package's cgo/Objective-C
# backend; GitHub's macos-latest runners ship these preinstalled.
- os: macos-latest
tags: ''
cgo: '1'
# Linux: server-mode build only. CGO_ENABLED=0 is required, not
# optional -- Wails3's own internal/operatingsystem and
# internal/assetserver/webview packages are cgo-gated onto
# GTK4/webkitgtk-6.0 pkg-config packages this runner doesn't have,
# and pull them in regardless of the `server` build tag unless
# cgo itself is disabled. Confirmed by actually building natively
# in a linux/amd64 container, not assumed: `go build -tags server
# .` fails on missing gtk4/webkitgtk-6.0 pkg-config with the
# default CGO_ENABLED=1, and only succeeds with CGO_ENABLED=0 --
# matching build/docker/Dockerfile.server's own default for
# exactly this reason.
- os: ubuntu-latest
tags: server
cgo: '0'
runs-on: ${{ matrix.os }}
env:
CGO_ENABLED: ${{ matrix.cgo }}
steps:
- uses: actions/checkout@v7
- uses: actions/download-artifact@v8
with:
name: frontend-dist
path: frontend/dist
- uses: actions/setup-go@v7
with:
go-version: '1.25'
cache: true
# Scoped to the root package + internal/, not `./...`: build/ios,
# build/android etc. are gomobile-toolchain scaffold with no main()
# outside that toolchain, and frontend/node_modules happens to bundle
# unrelated vendored Go source neither is part of Mill's own build.
- run: go build ${{ matrix.tags && format('-tags {0}', matrix.tags) || '' }} .
- run: go vet ${{ matrix.tags && format('-tags {0}', matrix.tags) || '' }} . ./internal/...
test-go:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-go@v7
with:
go-version: '1.25'
cache: true
# -tags server: internal/adapters/hotkey's desktop-tagged file needs
# cgo + X11 dev headers this runner doesn't have; the server-tagged
# stub has zero cgo deps and is what's actually exercised here either
# way (hotkey has no automated tests -- see docs/adr/0002, it can't
# be verified headlessly regardless of build tag). Doesn't need
# frontend/dist: internal/ packages never reference main.go's
# //go:embed.
- run: go test -tags server ./internal/... -race -cover
e2e:
runs-on: ubuntu-latest
needs: frontend
env:
# Required for the same reason as build-go's ubuntu-latest entry:
# playwright.config.ts's webServer builds the real server-mode
# binary inline, which needs CGO disabled on Linux to avoid pulling
# in Wails3's GTK-gated desktop code.
CGO_ENABLED: '0'
steps:
- uses: actions/checkout@v7
- uses: actions/download-artifact@v8
with:
name: frontend-dist
path: frontend/dist
- uses: actions/setup-go@v7
with:
go-version: '1.25'
cache: true
- uses: actions/setup-node@v7
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- run: npm ci
working-directory: frontend
- run: npx playwright install --with-deps chromium
working-directory: frontend
- run: npx playwright test
working-directory: frontend
- uses: actions/upload-artifact@v7
if: failure()
with:
name: playwright-report
path: frontend/playwright-report
retention-days: 7
govulncheck:
# macos-latest, not ubuntu-latest: govulncheck-action has no way to pass
# -tags, and the default (desktop) build tags only compile cleanly
# without extra system deps on macOS -- see build-go's ubuntu-latest
# comment for why that's not true on Linux. macOS is also Mill's
# primary target per SPEC.md, so this is the more representative scan
# anyway, not a workaround-of-convenience.
runs-on: macos-latest
needs: frontend
continue-on-error: true # advisory only -- golang/govulncheck-action is
# still self-described experimental (per ADR-0002's research); findings
# are worth seeing, not worth blocking a merge on yet.
steps:
- uses: actions/checkout@v7
- uses: actions/download-artifact@v8
with:
name: frontend-dist
path: frontend/dist
# Two separate steps, not one `go-package: ./internal/... .` -- the
# action passes go-package through a quoted shell variable, so a
# space-separated string becomes ONE malformed pattern
# ("no packages matched the provided patterns"), not two. Real
# failure caught on the first actual CI run, not assumed.
- uses: golang/govulncheck-action@v1
with:
go-version-input: '1.25'
go-package: ./internal/...
repo-checkout: false # already checked out above; the action's
# own default checkout would wipe the frontend-dist artifact
# just downloaded, which the root package needs (//go:embed).
- uses: golang/govulncheck-action@v1
with:
go-version-input: '1.25'
go-package: .
repo-checkout: false