mirror of
https://github.com/modrinth/code.git
synced 2026-07-31 21:26:40 +00:00
* Add consume batching delay * maybe fix * max batch size * more logging * parallelize remove tasks * delete/upsert project/version messages * prepare * more logging * log number of docs * try more targeted, homogenous version change ops * ensure only necessary fields are serialized into typesense * disable index background task * wip: script changes * don't facet by project id * fix * fix clippy * batch by document and dedup loaders * fix test * wip: projects/versions collections * clean up SearchBackend interface * cleanup pass * cleanup pass 2 * standardise fn names * cleanup pass * fix compile * factor out filter rewriting * query perf * put categories into the project doc * wip: search filter AST * doc comment * more AST normalization * (temp) convert search request errors into internal errors * implement unary NOT * tombi fmt * fix tests * revert request error * try increase stack size
182 lines
6.1 KiB
YAML
182 lines
6.1 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
types: [opened, synchronize]
|
|
merge_group:
|
|
types: [checks_requested]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/prod' }}
|
|
|
|
jobs:
|
|
skip-if-clean:
|
|
name: Skip if merge_queue produces no diff
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
skip: ${{ steps.check.outputs.skip }}
|
|
internal: ${{ steps.check-internal.outputs.internal }}
|
|
if: ${{ always() }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Check if workflow runs on an internal branch
|
|
id: check-internal
|
|
env:
|
|
EVENT_NAME: ${{ github.event_name }}
|
|
HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
|
|
REPO: ${{ github.repository }}
|
|
run: |
|
|
if [ "$EVENT_NAME" != "pull_request" ] || [ "$HEAD_REPO" = "$REPO" ]; then
|
|
echo "internal=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "internal=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Merge Queue CI Check Skipper
|
|
id: merge-queue-ci-skipper
|
|
uses: ./.github/merge-queue-ci-skipper
|
|
with:
|
|
secret: ${{ secrets.GH_ACCESS_TOKEN }}
|
|
|
|
- name: Check merge_group synthetic commit
|
|
id: check
|
|
env:
|
|
EVENT_NAME: ${{ github.event_name }}
|
|
SKIP_CHECK: ${{ steps.merge-queue-ci-skipper.outputs.skip-check }}
|
|
run: |
|
|
if [ "$EVENT_NAME" != "merge_group" ]; then
|
|
echo "skip=false" >> $GITHUB_OUTPUT
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$SKIP_CHECK" = "true" ]; then
|
|
echo "skip=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "skip=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
build:
|
|
name: Lint and Test
|
|
runs-on: ${{ needs.skip-if-clean.outputs.internal == 'true' && 'namespace-profile-modrinth-turbo' || 'ubuntu-latest' }}
|
|
needs: [skip-if-clean]
|
|
if: ${{ needs.skip-if-clean.outputs.skip != 'true' }}
|
|
|
|
env:
|
|
# Ensure pnpm output is colored in GitHub Actions logs
|
|
FORCE_COLOR: 3
|
|
# Make cargo nextest successfully ignore projects without tests
|
|
NEXTEST_NO_TESTS: pass
|
|
# Fail on warnings in CI
|
|
# (but don't do this in the root `Cargo.toml`,
|
|
# since we don't want warnings to become errors
|
|
# while developing)
|
|
RUSTFLAGS: -Dwarnings
|
|
# Redis config for tests
|
|
REDIS_TOPOLOGY: cluster
|
|
REDIS_CONNECTION_TYPE: multiplexed
|
|
REDIS_URL: redis://127.0.0.1:7000,redis://127.0.0.1:7001,redis://127.0.0.1:7002,redis://127.0.0.1:7003,redis://127.0.0.1:7004,redis://127.0.0.1:7005
|
|
# Avoid stack overflows in tests
|
|
RUST_MIN_STACK: 67108864
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
fetch-depth: 2
|
|
|
|
- name: Setup Node
|
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
with:
|
|
node-version-file: .nvmrc
|
|
|
|
- name: Enable Corepack
|
|
run: corepack enable
|
|
|
|
- name: Set up caches
|
|
if: needs.skip-if-clean.outputs.internal == 'true'
|
|
uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1
|
|
with:
|
|
cache: |
|
|
rust
|
|
pnpm
|
|
apt
|
|
|
|
- name: Set up Turborepo caching
|
|
if: needs.skip-if-clean.outputs.internal == 'true'
|
|
uses: namespace-actions/setup-turbocache@f96bd6befa13ae74b2858a5be49573640d4636f5 # v0.0.2
|
|
|
|
- name: Install apt dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y cmake libcurl4-openssl-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
|
|
|
|
- name: Setup Rust toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
|
|
with:
|
|
rustflags: ''
|
|
components: clippy, rustfmt
|
|
cache: false
|
|
|
|
- name: Setup mold
|
|
uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1 / Mold 2.41.0
|
|
|
|
- name: Setup binstall
|
|
uses: cargo-bins/cargo-binstall@ead08b90bd7b2e6d81963fb9cf0b7239f66d5db4 # v1.21.0
|
|
|
|
- name: Setup nextest
|
|
run: cargo binstall --no-confirm --secure --locked cargo-nextest@0.9.133
|
|
|
|
# cargo-binstall does not have pre-built binaries for sqlx-cli, so we fall
|
|
# back to a cached cargo install
|
|
- name: Setup cargo-sqlx
|
|
uses: taiki-e/cache-cargo-install-action@417450f3c33ee20393705369577571770643d4c7 # v3.0.7
|
|
with:
|
|
tool: sqlx-cli@0.8.6
|
|
locked: false
|
|
no-default-features: true
|
|
features: rustls,postgres
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install
|
|
|
|
- name: Set app environment
|
|
working-directory: packages/app-lib
|
|
run: cp .env.staging .env
|
|
|
|
# check if labrinth tests will actually run (cache miss)
|
|
- name: Check if labrinth tests need to run
|
|
id: check-labrinth
|
|
run: |
|
|
LABRINTH_TEST_STATUS=$(pnpm turbo run test --filter=@modrinth/labrinth --dry-run=json | jq -r '.tasks[] | select(.task == "test") | .cache.status')
|
|
echo "Labrinth test cache status: $LABRINTH_TEST_STATUS"
|
|
if [ "$LABRINTH_TEST_STATUS" = "HIT" ]; then
|
|
echo "needs_services=false" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "needs_services=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Start services
|
|
if: steps.check-labrinth.outputs.needs_services == 'true'
|
|
run: docker compose --profile clustered-redis up --wait
|
|
|
|
- name: Setup labrinth environment and database
|
|
if: steps.check-labrinth.outputs.needs_services == 'true'
|
|
working-directory: apps/labrinth
|
|
run: |
|
|
cp .env.local .env
|
|
sqlx database setup
|
|
|
|
- name: Lint and test
|
|
run: pnpm run ci
|
|
|
|
- name: Verify intl:extract has been run
|
|
run: |
|
|
pnpm turbo run intl:extract --force
|
|
pnpm scripts i18n-icu-contract prune-local --check
|
|
git diff --exit-code --color */*/src/locales/*/index.json
|