diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5bc737..ad139c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,18 +10,9 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: oven-sh/setup-bun@v2 with: bun-version: 1.3.14 - run: bun install --frozen-lockfile - # Biome: format + lint + organize-imports - - run: bun run check - # TypeScript - - run: bun --cwd packages/types typecheck - - run: bun --cwd packages/browser typecheck - - run: bun --cwd packages/tiers typecheck - - run: bun --cwd apps/api typecheck - - run: bun --cwd apps/web typecheck - # Unit and proxy integration tests - - run: bun test + - run: bun run verify diff --git a/.github/workflows/publish-baseline.yml b/.github/workflows/publish-baseline.yml index fea2a66..5ef208b 100644 --- a/.github/workflows/publish-baseline.yml +++ b/.github/workflows/publish-baseline.yml @@ -45,22 +45,22 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - name: Sanitize platform name run: | platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - uses: docker/build-push-action@v6 + - uses: docker/build-push-action@v7 id: build with: context: . @@ -82,7 +82,7 @@ jobs: digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: digests-baseline-${{ env.PLATFORM_PAIR }} path: /tmp/digests/* @@ -96,19 +96,19 @@ jobs: contents: read packages: write steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: path: /tmp/digests pattern: digests-baseline-* merge-multiple: true - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - name: Compute tags id: tags diff --git a/.github/workflows/publish-nightly.yml b/.github/workflows/publish-nightly.yml index 97d7d6e..6365491 100644 --- a/.github/workflows/publish-nightly.yml +++ b/.github/workflows/publish-nightly.yml @@ -38,17 +38,17 @@ jobs: packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - - uses: docker/metadata-action@v5 + - uses: docker/metadata-action@v6 id: meta with: images: ${{ env.IMAGE }} @@ -58,7 +58,7 @@ jobs: platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - uses: docker/build-push-action@v6 + - uses: docker/build-push-action@v7 id: build with: context: . @@ -78,7 +78,7 @@ jobs: digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: digests-nightly-${{ env.PLATFORM_PAIR }} path: /tmp/digests/* @@ -93,21 +93,21 @@ jobs: packages: write steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: path: /tmp/digests pattern: digests-nightly-* merge-multiple: true - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - - uses: docker/metadata-action@v5 + - uses: docker/metadata-action@v6 id: meta with: images: ${{ env.IMAGE }} @@ -133,4 +133,4 @@ jobs: # github.sha which disagreed with what got pushed (type=sha writes # short 7-char SHA but github.sha is the full 40-char hash). tag=$(jq -r '.tags[0]' <<< "$DOCKER_METADATA_OUTPUT_JSON") - docker buildx imagetools inspect "$tag" \ No newline at end of file + docker buildx imagetools inspect "$tag" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b58392c..411bd60 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -43,17 +43,17 @@ jobs: packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - - uses: docker/metadata-action@v5 + - uses: docker/metadata-action@v6 id: meta with: images: ${{ env.IMAGE }} @@ -63,7 +63,7 @@ jobs: platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - uses: docker/build-push-action@v6 + - uses: docker/build-push-action@v7 id: build with: context: . @@ -83,7 +83,7 @@ jobs: digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: digests-release-${{ env.PLATFORM_PAIR }} path: /tmp/digests/* @@ -98,21 +98,21 @@ jobs: packages: write steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: path: /tmp/digests pattern: digests-release-* merge-multiple: true - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-buildx-action@v4 - - uses: docker/metadata-action@v5 + - uses: docker/metadata-action@v6 id: meta with: images: ${{ env.IMAGE }} @@ -136,4 +136,3 @@ jobs: # ("ghcr.io/germondai/trawl:1.0.0" / ":latest") so no $IMAGE prefix needed. tag=$(jq -r '.tags[0]' <<< "$DOCKER_METADATA_OUTPUT_JSON") docker buildx imagetools inspect "$tag" - diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aed5d3e..36ddc54 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ For security issues, **do not open a public issue** — see [SECURITY.md](SECURI ## Development setup -Requirements: **Bun ≥ 1.1** and **Docker** (for the Redis service used in tests). +Requirements: **Bun 1.3.14** and **Docker** (for the Redis service used in tests). ```bash git clone https://github.com/germondai/trawl.git @@ -41,12 +41,14 @@ The API requires Redis. The fastest way is `docker compose up -d redis`. We use [Biome](https://biomejs.dev/) for both: ```bash -bun run lint # check -bun run format # write -bun run check # format + lint + import sort, write +bun run check # read-only format, lint, and import-order check +bun run fix # apply safe Biome fixes and formatting +bun run typecheck # typecheck all five TypeScript workspaces +bun run build # production-build the web and docs apps +bun run verify # full release gate: check, types, tests, and builds ``` -CI runs `bun run lint` on every PR. +CI runs `bun run verify` on every PR. ## Project layout @@ -81,7 +83,7 @@ The `type` is one of `feat`, `fix`, `chore`, `docs`, `ci`, `refactor`, `test`, ` 1. **Open an issue first** for non-trivial changes. A two-paragraph problem statement is enough. 2. **Branch from `main`.** Use a descriptive name (`feat/captcha-hcaptcha`, `fix/redis-reconnect`). -3. **Run `bun run check` before pushing.** Lint and format must be clean. +3. **Run `bun run verify` before pushing.** Lint, types, tests, and production builds must be clean. 4. **Update `CHANGELOG.md`** under `## [Unreleased]` for any user-visible change. 5. **Fill out the PR template** — the checklist catches the easy-to-miss items. 6. **Keep PRs focused.** One feature or fix per PR; large refactors should be split.