refactor!: make fat meta-cli
the default
#2517
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
- ready_for_review | |
env: | |
GHJK_VERSION: "f380522" | |
DENO_VERSION: "1.41.0" | |
RUST_BACKTRACE: "full" | |
RUST_LOG: "info,swc_ecma_codegen=off,tracing::span=off" | |
jobs: | |
changes: | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: read | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
website: | |
- '.github/workflows/tests.yml' | |
- 'website/**' | |
meta-cli: | |
- '.github/workflows/tests.yml' | |
- 'libs/**' | |
- 'meta-cli/**' | |
- 'Cargo.lock' | |
typegate: | |
- '.github/workflows/tests.yml' | |
- 'libs/**' | |
- 'typegate/**' | |
- 'meta-cli/**' | |
- 'Cargo.lock' | |
full: | |
- '.github/workflows/tests.yml' | |
- 'libs/**' | |
- 'typegate/**' | |
- 'typegraph/**' | |
- 'meta-cli/**' | |
- 'Cargo.lock' | |
rust: | |
- '.github/workflows/tests.yml' | |
- 'libs/**' | |
- 'Cargo.lock' | |
outputs: | |
website: ${{ steps.filter.outputs.website }} | |
meta-cli: ${{ steps.filter.outputs.meta-cli }} | |
typegate: ${{ steps.filter.outputs.typegate }} | |
full: ${{ steps.filter.outputs.full }} | |
rust: ${{ steps.filter.outputs.rust }} | |
test-pre-commit: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dsherret/rust-toolchain-file@v1 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
# use custom shared key to share cache across jobs | |
# default prefix includes job-id otherwise | |
shared-key: ${{ runner.os }}-rust-${{ hashFiles('**/rust-toolchain.toml') }}-${{ hashFiles('**/Cargo.lock') }} | |
- uses: denoland/setup-deno@v1 | |
with: | |
deno-version: ${{ env.DENO_VERSION }} | |
- uses: metatypedev/setup-ghjk@a7bbf22959e3c0f80b8ba9f800b0a9f1ff17fa7b | |
- shell: bash | |
run: | | |
sudo apt update | |
sudo apt install -y --no-install-recommends libclang-dev clang | |
cd website | |
pnpm install --frozen-lockfile | |
cd .. | |
cd dev-tools | |
pnpm install --frozen-lockfile --recursive | |
cd .. | |
deno cache --import-map typegate/import_map.json typegate/src/main.ts typegate/tests/utils/mod.ts | |
- uses: pre-commit/[email protected] | |
test-website: | |
needs: changes | |
if: ${{ needs.changes.outputs.website == 'true' }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: denoland/setup-deno@v1 | |
with: | |
deno-version: ${{ env.DENO_VERSION }} | |
- name: Cache deno dir | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.DENO_DIR }} | |
key: deno-mac-${{ hashFiles('**/deno.lock') }} | |
- uses: metatypedev/setup-ghjk@a7bbf22959e3c0f80b8ba9f800b0a9f1ff17fa7b | |
- name: Cache .venv dir | |
uses: actions/cache@v4 | |
with: | |
path: .venv | |
key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock', '.ghjk/lock.json') }} | |
- shell: bash | |
run: | | |
python3 -m venv .venv | |
source .venv/bin/activate | |
poetry install --no-root | |
cd website | |
pnpm install --frozen-lockfile | |
pnpm lint | |
pnpm build | |
test-meta-cli-compat: | |
needs: changes | |
if: ${{ needs.changes.outputs.meta-cli == 'true' }} | |
runs-on: "${{ matrix.os }}" | |
strategy: | |
matrix: | |
include: | |
# TODO | |
# - os: macos-latest | |
# activate: "source .venv/bin/activate" | |
- os: macos-14 | |
activate: "source .venv/bin/activate" | |
#- os: windows-latest | |
# activate: '.venv\Scripts\activate.bat' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: denoland/setup-deno@v1 | |
with: | |
deno-version: ${{ env.DENO_VERSION }} | |
- name: Cache deno dir | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.DENO_DIR }} | |
key: deno-mac-${{ hashFiles('**/deno.lock') }} | |
- uses: dsherret/rust-toolchain-file@v1 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: ${{ runner.os }}-rust-${{ hashFiles('**/rust-toolchain.toml') }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Cache .venv dir | |
uses: actions/cache@v4 | |
with: | |
path: .venv | |
key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock', '.ghjk/lock.json') }} | |
- uses: metatypedev/setup-ghjk@a7bbf22959e3c0f80b8ba9f800b0a9f1ff17fa7b | |
with: | |
# temporary fix | |
cache-key-prefix: ${{ matrix.os }} | |
- shell: bash | |
env: | |
WASM_FILE: target/debug/typegraph_core.wasm | |
run: | | |
python3 -m venv .venv | |
${{ matrix.activate }} | |
cd typegraph/python | |
poetry install --no-root | |
cd ../.. | |
poetry install --no-root | |
deno cache --import-map typegate/import_map.json typegate/src/main.ts typegate/tests/utils/mod.ts | |
cargo build -p typegraph_core --target wasm32-unknown-unknown --target-dir target/wasm | |
mkdir -p $(dirname $WASM_FILE) | |
wasm-opt -Oz target/wasm/wasm32-unknown-unknown/debug/typegraph_core.wasm -o $WASM_FILE.opt | |
wasm-tools component new $WASM_FILE.opt -o $WASM_FILE | |
rm -rf typegraph/python/typegraph/gen | |
poetry run python -m wasmtime.bindgen $WASM_FILE --out-dir typegraph/python/typegraph/gen | |
cargo run --locked --package meta-cli -- --help | |
cargo test --locked --package meta-cli | |
test-docker: | |
needs: changes | |
if: ${{ needs.changes.outputs.typegate == 'true' }} | |
runs-on: ${{ matrix.runner }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- platform: linux/amd64 | |
runner: ubuntu-latest | |
# FIXME: try macos-14 runner once all actions support it | |
# docker buildx action broken as of 2024-02-09 | |
# TODO | |
# - platform: linux/arm64 | |
# runner: custom-macos | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-buildx-action@v3 | |
- uses: scherermichael-oss/action-has-permission@master | |
id: check | |
with: | |
required-permission: write | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- uses: docker/login-action@v3 | |
if: steps.check.outputs.has-permission | |
with: | |
registry: docker.io | |
username: zifeo | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Build with cache (internal) | |
uses: docker/build-push-action@v5 | |
if: steps.check.outputs.has-permission | |
with: | |
file: dev/Dockerfile | |
platforms: ${{ matrix.platform }} | |
push: false | |
cache-from: type=registry,ref=docker.io/zifeo/metatype-cache:ci | |
cache-to: type=registry,ref=docker.io/zifeo/metatype-cache:ci,mode=max | |
# check target runs extra validation steps in the Dockerfile | |
target: check | |
- name: Build without cache (external) | |
uses: docker/build-push-action@v5 | |
if: "! steps.check.outputs.has-permission" | |
with: | |
file: dev/Dockerfile | |
platforms: linux/amd64 | |
push: false | |
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/typegate:latest | |
target: check | |
test-full: | |
needs: changes | |
if: ${{ needs.changes.outputs.full == 'true' }} | |
runs-on: | |
- self-hosted # https://check-jsonschema.readthedocs.io/en/latest/faq.html#using-self-hosted-runners | |
- custom-ubuntu-large | |
timeout-minutes: 60 | |
services: | |
redis: | |
image: bitnami/redis:7.0 | |
env: | |
REDIS_PASSWORD: password | |
ports: | |
- 6379:6379 | |
options: >- | |
--health-cmd "redis-cli ping" | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
postgres: | |
image: postgres:15 | |
env: | |
POSTGRES_DB: db | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: password | |
ports: | |
- 5432:5432 | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
minio: | |
image: bitnami/minio:2022 | |
env: | |
MINIO_REGION_NAME: local | |
MINIO_ROOT_USER: minio | |
MINIO_ROOT_PASSWORD: password | |
MINIO_DEFAULT_BUCKETS: "bucket:none" | |
ports: | |
- "9000:9000" | |
- "9001:9001" | |
env: | |
DENO_DIR: deno-dir | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dsherret/rust-toolchain-file@v1 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: ${{ runner.os }}-rust-${{ hashFiles('**/rust-toolchain.toml') }}-${{ hashFiles('**/Cargo.lock') }} | |
- uses: denoland/setup-deno@v1 | |
with: | |
deno-version: ${{ env.DENO_VERSION }} | |
- name: Cache deno dir | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.DENO_DIR }} | |
key: deno-${{ hashFiles('**/deno.lock') }} | |
- name: Cache .venv dir | |
uses: actions/cache@v4 | |
with: | |
path: .venv | |
key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock', '.ghjk/lock.json') }} | |
# FIXME: the custom runner is missing some ambient items found in | |
# github runner images by default. remove this hack when ghjk handles | |
# zstd/bsdtar on it's own | |
- run: | | |
sudo apt update | |
sudo apt install -y --no-install-recommends zstd | |
- uses: metatypedev/setup-ghjk@a7bbf22959e3c0f80b8ba9f800b0a9f1ff17fa7b | |
- shell: bash | |
env: | |
WASM_FILE: target/debug/typegraph_core.wasm | |
run: | | |
echo pwd in $(pwd) | |
sudo apt update | |
sudo apt install -y --no-install-recommends gcc-multilib pkg-config libssl-dev libclang-dev perl make | |
python3 -m venv .venv | |
source .venv/bin/activate | |
poetry install --no-root | |
deno cache --import-map typegate/import_map.json typegate/src/main.ts typegate/tests/utils/mod.ts | |
cargo build -p typegraph_core --target wasm32-unknown-unknown --target-dir target/wasm | |
mkdir -p $(dirname $WASM_FILE) | |
wasm-opt -Oz target/wasm/wasm32-unknown-unknown/debug/typegraph_core.wasm -o $WASM_FILE.opt | |
wasm-tools component new $WASM_FILE.opt -o $WASM_FILE | |
rm -rf typegraph/node/sdk/src/gen typegraph/node/sdk/dist | |
jco transpile $WASM_FILE -o typegraph/node/sdk/src/gen --map metatype:typegraph/host=../host/host.js | |
cd typegraph/node | |
pnpm install | |
pnpm run sdk-build | |
cp ./sdk/{package.json,package-lock.json,LICENSE.md} ./sdk/dist | |
cd ../.. | |
rm -rf typegraph/python/typegraph/gen | |
poetry run python -m wasmtime.bindgen $WASM_FILE --out-dir typegraph/python/typegraph/gen | |
# from old test-typegraph-core | |
# test in native rust, not in wasm for a future rust SDK | |
# without --tests, the --doc is causing a link error "syntax error in VERSION script" | |
cargo test --locked --package typegraph_core --tests | |
# from old test-meta-cli | |
cargo run --locked --package meta-cli -- --help | |
cargo test --locked --package meta-cli | |
# from old test-libs | |
cargo test --locked --exclude meta-cli --exclude typegate --exclude typegraph_engine --exclude typegraph_core --workspace | |
deno run -A dev/update.ts --cache-only || deno run -A dev/update.ts --cache-only | |
cargo build -p meta-cli | |
cargo build -p xtask # xtask and meta-cli are used by the test suite | |
deno run -A dev/test.ts --threads 1 -- --coverage=coverage | |
# FIXME: required due to https://github.com/denoland/deno/issues/21621#issuecomment-1887870712 | |
deno cache --import-map typegate/import_map.json \ | |
typegate/src/main.ts \ | |
typegate/tests/utils/*.ts \ | |
dev/deps.ts \ | |
dev/utils.ts | |
deno --unstable-worker-options --unstable-net coverage ./coverage --lcov > coverage.lcov | |
- uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ./coverage.lcov | |
fail_ci_if_error: true | |
test-lsp: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: denoland/setup-deno@v1 | |
with: | |
deno-version: ${{ env.DENO_VERSION }} | |
- uses: metatypedev/setup-ghjk@a7bbf22959e3c0f80b8ba9f800b0a9f1ff17fa7b | |
- shell: bash | |
run: | | |
cd dev-tools | |
pnpm install --frozen-lockfile --recursive | |
cd ts-language-server | |
# node --test --import=tsx --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage.lcov tests/*.test.ts | |
node --test --import=tsx tests/*.test.ts | |
# - uses: codecov/codecov-action@v4 | |
# with: | |
# token: ${{ secrets.CODECOV_TOKEN }} | |
# files: ./dev-tools/ts-language-server/coverage.lcov | |
# fail_ci_if_error: true |