diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a2d0039f..cac5a302 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,3 +1,4 @@ + on: pull_request: merge_group: @@ -8,139 +9,73 @@ name: Check jobs: license-check: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Nix ❄️ - uses: cachix/install-nix-action@v31 - with: - nix_path: nixpkgs=channel:nixos-26.05 - - name: Check licenses - run: | - nix-env -i just reuse -f '' - just check-licenses + run: just check-licenses rust-fmt: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - components: rustfmt - - name: Check formatting run: cargo fmt --check rust-clippy: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - components: clippy - - name: Run Clippy run: cargo clippy --all-targets -- -D warnings rust-tests: - runs-on: ubuntu-latest + runs-on: coln-runner needs: [rust-fmt, rust-clippy] steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - - name: Install nextest - uses: taiki-e/install-action@nextest - - - name: Install just - uses: extractions/setup-just@v3 - - name: Run tests run: just check-rust coln-js-runtime-check: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - target: wasm32-unknown-unknown - - - name: Install nextest - uses: taiki-e/install-action@nextest - - - name: Install wasm-bindgen-cli - run: | - VERSION="0.2.123" - curl -sSL "https://github.com/wasm-bindgen/wasm-bindgen/releases/download/$VERSION/wasm-bindgen-$VERSION-x86_64-unknown-linux-musl.tar.gz" | tar xz - sudo mv "wasm-bindgen-$VERSION-x86_64-unknown-linux-musl/wasm-bindgen" /usr/local/bin/ - wasm-bindgen --version - - - name: Install wasm-opt - run: | - VERSION="version_124" - curl -sSL "https://github.com/WebAssembly/binaryen/releases/download/$VERSION/binaryen-$VERSION-x86_64-linux.tar.gz" | tar xz - sudo mv "binaryen-$VERSION/bin/wasm-opt" /usr/local/bin/ - wasm-opt --version - - - name: Install wasm-bodge - run: cargo install wasm-bodge --locked - - - name: Install just - uses: extractions/setup-just@v3 - - - name: Install Node - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: npm - cache-dependency-path: packages/coln-js-runtime/package-lock.json - - name: Install npm dependencies working-directory: packages/coln-js-runtime - run: npm ci + run: pnpm ci + + - name: Rust Checks + working-directory: packages/coln-js-runtime + run: just test-rust - - name: Run checks + - name: JS Checks working-directory: packages/coln-js-runtime - run: just check + run: nix develop --command just test-npm haskell-tests: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Nix ❄️ - uses: cachix/install-nix-action@v31 - - - name: Set up Cachix ♻️ - uses: cachix/cachix-action@v17 - with: - name: coln - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - name: Formatting (.hs) - run: nix build .#format-hs + run: nix build .#format-hs --accept-flake-config - name: Formatting (.cabal) - run: nix build .#format-cabal + run: nix build .#format-cabal --accept-flake-config - name: Haskell Tests run: | - RUN_CHECKS=$(nix build .#haskell-tests --no-link --print-out-paths) + RUN_CHECKS=$(nix build .#haskell-tests --no-link --print-out-paths --accept-flake-config) $RUN_CHECKS diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 70ecd16c..3daea2fc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,23 +7,14 @@ name: Deploy jobs: deploy-manual: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Nix ❄️ - uses: cachix/install-nix-action@v31 - - - name: Set up Cachix ♻️ - uses: cachix/cachix-action@v17 - with: - name: coln - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - name: Build manual - run: nix build .#manual + run: nix build .#manual --accept-flake-config - name: Deploy manual uses: peaceiris/actions-gh-pages@v4 diff --git a/.github/workflows/extension.yml b/.github/workflows/extension.yml index 8eb3b022..59b99c84 100644 --- a/.github/workflows/extension.yml +++ b/.github/workflows/extension.yml @@ -7,24 +7,15 @@ name: VSCode Extension jobs: vscode-extension: - runs-on: ubuntu-latest + runs-on: coln-runner steps: - name: Checkout ⬇️ uses: actions/checkout@v6 - - name: Install Nix ❄️ - uses: cachix/install-nix-action@v31 - - - name: Set up Cachix ♻️ - uses: cachix/cachix-action@v17 - with: - name: coln - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - name: Build extension run: | - nix build .#vscode-extension + nix build .#vscode-extension --accept-flake-config mv result coln-vscode-extension.vsix - name: Upload artefact diff --git a/flake.lock b/flake.lock index 145fa01a..b0641ce9 100644 --- a/flake.lock +++ b/flake.lock @@ -1,9 +1,52 @@ { "nodes": { - "flake-utils": { + "agenix": { "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", "systems": "systems" }, + "locked": { + "lastModified": 1770165109, + "narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=", + "owner": "ryantm", + "repo": "agenix", + "rev": "b027ee29d959fda4b60b57566d64c98a202e0feb", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1744478979, + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, "locked": { "lastModified": 1731533236, "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", @@ -20,7 +63,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1731533236, @@ -39,7 +82,7 @@ "ghc-wasm-meta": { "inputs": { "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { "host": "gitlab.haskell.org", @@ -57,7 +100,44 @@ "type": "gitlab" } }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1745494811, + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1754028485, + "narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "59e69648d345d6e8fef86158c555730fa12af9de", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1781472460, "narHash": "sha256-dqwpb1o0xIwb1rv3PPbpY7RBm8heFiOLAubszNLBefc=", @@ -73,7 +153,7 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { "lastModified": 1780145889, "narHash": "sha256-md0zn0RnwNvPyASas1yG5YUuwQ4ALA6ucL50l0DvqCo=", @@ -89,7 +169,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1744536153, "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", @@ -107,15 +187,16 @@ }, "root": { "inputs": { + "agenix": "agenix", "flake-utils": "flake-utils", "ghc-wasm-meta": "ghc-wasm-meta", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1782184651, @@ -160,6 +241,21 @@ "repo": "default", "type": "github" } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 860d0be0..14922e73 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,11 @@ +# trivial { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; ghc-wasm-meta.url = "gitlab:haskell-wasm/ghc-wasm-meta?host=gitlab.haskell.org"; + agenix.url = "github:ryantm/agenix"; }; outputs = inputs@{ @@ -139,6 +141,11 @@ format-hs = nuShellCheck [pkgs.fourmolu] ./nix/checks/format-hs.nu; format-cabal = nuShellCheck [pkgs.haskellPackages.cabal-gild] ./nix/checks/format-cabal.nu; + nixosConfigurations.github-runner = inputs.nixpkgs.lib.nixosSystem { + modules = [./nix/runner]; + specialArgs = {agenix = inputs.agenix; disko = inputs.disko; inherit shellInputs; }; + }; + manual = pkgs.stdenv.mkDerivation { name = "coln-manual"; @@ -199,6 +206,39 @@ npmRoot = lsTsDir; nodejs = pkgs.nodejs_24; }; + + shellInputs = with pkgs; [ + inputs.agenix.packages.${system}.agenix + cabal-install + cabal2nix + cargo-llvm-cov + coln-manual-dev + forester + fourmolu + esbuild + haskell-wasm.wasm32-wasi-ghc-9_14 + haskell-wasm.wasm32-wasi-cabal-9_14 + haskell.compiler.ghc912 + haskell.packages.ghc912.haskell-language-server + haskellPackages.cabal-gild + jq + just + nodejs_24 + pnpm + packages.wasm-bodge + rustToolchain + packages.wasm-bindgen-cli + binaryen + openssl + pkg-config + reuse + simple-http-server + tectonic + typescript + vtsls + zlib + zlib.dev + ]; in { inherit packages; @@ -213,38 +253,7 @@ }; devShells.default = pkgs.mkShell { name = "coln"; - buildInputs = with pkgs; [ - cabal-install - cabal2nix - cargo-llvm-cov - cargo-nextest - coln-manual-dev - forester - fourmolu - esbuild - haskell-wasm.wasm32-wasi-ghc-9_14 - haskell-wasm.wasm32-wasi-cabal-9_14 - haskell.compiler.ghc912 - haskell.packages.ghc912.haskell-language-server - haskellPackages.cabal-gild - jq - just - nodejs_24 - pnpm - packages.wasm-bodge - rustToolchain - packages.wasm-bindgen-cli - binaryen - openssl - pkg-config - reuse - simple-http-server - tectonic - typescript - vtsls - zlib - zlib.dev - ]; + buildInputs = shellInputs; shellHook = '' # GCC 15 (nixos-26.05) defaults to -std=gnu23 which removed ATOMIC_VAR_INIT. # This breaks mimalloc-rust-sys, which is a dependency of dbsp. diff --git a/nix/runner/README.md b/nix/runner/README.md new file mode 100644 index 00000000..bc434b53 --- /dev/null +++ b/nix/runner/README.md @@ -0,0 +1,88 @@ +# Coln NixOS Runner +A NixOS configuration for a self-hosted github server for the Coln repo. The configuration supports spawning $n$ workers. + +## What's included +This nix flake provides a nixos configuration with: + +- Secrets managed by [`agenix`](https://github.com/ryantm/agenix) +- A configurable expression to launch $n$ sandboxed github runners pointing to the `Coln` github repository + +## What isn't included +The nix flake doesn't: + +- Provide a `hardware-configuration.nix` +- Configure users + +# Setup +As mentioned above, the configuration uses `agenix` to provision secrets. As a minimum, the following need to be configured: + +- *PAT Token* : For github. Provides read/write access to the Coln repository and the ability to run actions. Stored in `runner-token.age`. + +The runner won't be functional without this. + +## `agenix` Setup +Agenix needs to be able to decrypt secrets on the target machine. This requires knowing the following before installation: + +- *Host user ssh public key* (`~/.ssh/.pub`) : So that we can read/write secrets on the host. +- *Target host ssh public key* (`/etc/ssh/ssh_host_ed25519_key.pub`) : So that the target can decrypt secrets on boot. + +Once knowing these we can add these public keys to `secrets.nix` so that they can read/written to by those users: + +```nix +let + + # users + host-user = ""; + users = [host-user]; + + # systems + target-system = ""; + systems = [target-system]; + + all = users ++ systems; + +in +{ + ... +} +``` + +Which will then allow us to create encrypted files via `agenix -e `. + +## PAT Token +After generating a classic github PAT token via [this](https://github.com/settings/tokens) link and entitling it to repo permissions (only this is necessary), the token can be encrypted to a file via `agenix -e runner-token.age` in the `secrets` directory. Paste the token into the file. + +## Extras +As mentioned above. The configuration doesn't provide: + +- **Hardware Configuration** : This has to be generated by `nixos-generate-config` +- **User Config** : This needs to be configured manually +- **Networking** : This needs to be configured manually + +# Configuration +> [!NOTE] +> Text of the form `$` points to a configurable variable in `github.nix` + +The configuration provides an expression that spawns $n =$`$workers` runners on startup. These are each run in their own directory under the root `$dirRoot`, with name `coln-runner-` where $x \in \{1, \cdots , n\}$. Each of these runners share a cache directory `.cache` living under `$dirRoot`. Cargo build artefacts are stored here. + +```txt +dirRoot/ +├── cache/ +│ ├── .cache/ +│ │ └── nix/ (XDG_CACHE_HOME - nix cache) +│ ├── cargo-home/ (CARGO_HOME - crate registry/downloads) +│ └── cargo-target/ (CARGO_TARGET_DIR - compiled artifacts) +├── coln-runner-1/ +│ └── (workDir - job checkout and execution) +├── coln-runner-2/ +│ └── (workDir - job checkout and execution) +├── coln-runner-3/ +│ └── (workDir - job checkout and execution) +│ ... +└── coln-runner-N/ + └── (workDir - job checkout and execution) +``` + +## Configurable Variables +- `workers` : The number of runners to spawn +- `rootDir` : The directory in which to store cache/workers diff --git a/nix/runner/default.nix b/nix/runner/default.nix new file mode 100644 index 00000000..1842d9cd --- /dev/null +++ b/nix/runner/default.nix @@ -0,0 +1,27 @@ +{agenix, ...}:{ + imports = [ + agenix.nixosModules.default + ./github.nix + ]; + + config = { + nixpkgs.hostPlatform = "x86_64-linux"; + system.stateVersion = "26.05"; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + nix.settings = { + experimental-features = ["nix-command" "flakes"]; + trusted-substituters = [ "https://coln.cachix.org" ]; + trusted-public-keys = [ "coln.cachix.org-1:xplHZrvUVve3NSquwwW5QRl6MYbDBHx3rw3Np69kjw4=" ]; + }; + services.openssh.enable = true; + + # VM Settings + virtualisation.vmVariant = { + virtualisation = { + memorySize = 8000; + cores = 8; + }; + }; + }; +} diff --git a/nix/runner/github.nix b/nix/runner/github.nix new file mode 100644 index 00000000..a47e9d09 --- /dev/null +++ b/nix/runner/github.nix @@ -0,0 +1,67 @@ +{ + config, + pkgs, + lib, + shellInputs, + ... +}: +let + workers = 10; + rootDir = "/var/lib/coln-runner"; + cacheDir = "${rootDir}/cache"; + mkRunner = + name: + let + workDir = "${rootDir}/${name}"; + in + { + services.github-runners = { + ${name} = { + enable = true; + name = name; + replace = true; + tokenFile = config.age.secrets.runner-token.path; + tokenType = "access"; + url = "https://github.com/coln-project/Coln"; + extraPackages = with pkgs; [ curl git gcc openssl.dev ] ++ shellInputs; + extraEnvironment = { + OPENSSL_LIB_DIR = "${pkgs.openssl.out}/lib"; + OPENSSL_INCLUDE_DIR = "${pkgs.openssl.dev}/include"; + CFLAGS = "-std=gnu17"; + XDG_CACHE_HOME = "${cacheDir}/.cache"; + CARGO_HOME = "${cacheDir}/cargo-home"; + CARGO_TARGET_DIR = "${cacheDir}/cargo-target"; + }; + serviceOverrides = { + ReadWritePaths = [ rootDir ]; + }; + workDir = "${workDir}"; + user = "coln-runner"; + noDefaultLabels = true; + extraLabels = [ "coln-runner" ]; + }; + }; + systemd.tmpfiles.rules = [ + "d ${workDir} 0755 coln-runner coln-runner -" + ]; + }; + runners = lib.mkMerge ( + map (n: mkRunner "coln-runner-${builtins.toString n}") (lib.range 1 workers) + ); +in +{ + config = lib.mkMerge [ + { + age.secrets.runner-token.file = ./secrets/runner-token.age; + users.users.coln-runner = { + isSystemUser = true; + group = "coln-runner"; + }; + users.groups.coln-runner = { }; + systemd.tmpfiles.rules = [ + "d ${cacheDir} 0755 coln-runner coln-runner -" + ]; + } + runners + ]; +} diff --git a/nix/runner/hardware-configuration.nix b/nix/runner/hardware-configuration.nix new file mode 100644 index 00000000..6aa2eac1 --- /dev/null +++ b/nix/runner/hardware-configuration.nix @@ -0,0 +1,3 @@ +{ +# Generate me!!! +} diff --git a/nix/runner/secrets/secrets.nix b/nix/runner/secrets/secrets.nix new file mode 100644 index 00000000..32236bd2 --- /dev/null +++ b/nix/runner/secrets/secrets.nix @@ -0,0 +1,17 @@ +let + + # users + host-user = ""; + users = [host-user]; + + # systems + target-system = ""; + systems = [target-system]; + + all = users ++ systems; + +in +{ + "runner-token.age".publicKeys = all; + "wifi.age".publicKeys = all; +} diff --git a/packages/coln-js-runtime/justfile b/packages/coln-js-runtime/justfile index 06952e81..103fbd70 100644 --- a/packages/coln-js-runtime/justfile +++ b/packages/coln-js-runtime/justfile @@ -15,10 +15,10 @@ test-rust: cargo test --doc -p {{crate}} build: - npm run build + pnpm run build test-npm: build - npm test + pnpm test test: test-rust test-npm diff --git a/packages/coln-js-runtime/package.json b/packages/coln-js-runtime/package.json index 1aff7990..5491dca5 100644 --- a/packages/coln-js-runtime/package.json +++ b/packages/coln-js-runtime/package.json @@ -15,9 +15,9 @@ "scripts": { "copy-license": "cp -r ../../LICENSES LICENSES", "build": "wasm-bodge build", - "test": "npm run test:unit && npm run test:basic-ir", + "test": "pnpm run test:unit && pnpm run test:basic-ir", "test:unit": "tsx --test tests/id-resolution.test.ts", - "test:basic-ir": "npm run typecheck:basic-ir && npm run test:basic-ir:runtime", + "test:basic-ir": "pnpm run typecheck:basic-ir && pnpm run test:basic-ir:runtime", "typecheck:basic-ir": "tsx --tsconfig tests/basic-ir/tsconfig.json --test tests/basic-ir/typecheck.ts", "test:basic-ir:runtime": "tsx --tsconfig tests/basic-ir/tsconfig.json --test \"tests/basic-ir/*.test.ts\"" }, @@ -121,4 +121,4 @@ "require": "./dist/cjs/slim.cjs" } } -} +} \ No newline at end of file diff --git a/packages/coln-js-runtime/pnpm-lock.yaml b/packages/coln-js-runtime/pnpm-lock.yaml index 1cc1be34..34df119d 100644 --- a/packages/coln-js-runtime/pnpm-lock.yaml +++ b/packages/coln-js-runtime/pnpm-lock.yaml @@ -11,15 +11,192 @@ importers: '@types/node': specifier: ^25.9.3 version: 25.9.3 + esbuild: + specifier: ^0.28.1 + version: 0.28.1 + tsx: + specifier: ^4.23.1 + version: 4.23.1 typescript: specifier: ^5.0.0 version: 5.9.3 packages: + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@types/node@25.9.3': resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + tsx@4.23.1: + resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==} + engines: {node: '>=18.0.0'} + hasBin: true + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -30,10 +207,126 @@ packages: snapshots: + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + '@types/node@25.9.3': dependencies: undici-types: 7.24.6 + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + fsevents@2.3.3: + optional: true + + tsx@4.23.1: + dependencies: + esbuild: 0.28.1 + optionalDependencies: + fsevents: 2.3.3 + typescript@5.9.3: {} undici-types@7.24.6: {} diff --git a/packages/coln-js-runtime/pnpm-workspace.yaml b/packages/coln-js-runtime/pnpm-workspace.yaml new file mode 100644 index 00000000..49c0ad74 --- /dev/null +++ b/packages/coln-js-runtime/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: false