diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a441ace..6607c13 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,15 +8,16 @@ stages: - deploy variables: - DENO_VERSION: "1.40.0" + BUN_VERSION: "1" RUST_VERSION: "1.75.0" NODE_VERSION: "20" # Templates -.-base: - image: denoland/:${DENO_VERSION} +.bun-base: + image: oven/bun:${BUN_VERSION} before_script: - - --version + - bun --version + - bun install --frozen-lockfile .rust-base: image: rust:${RUST_VERSION} @@ -26,12 +27,12 @@ variables: - rustup target add wasm32-unknown-unknown # Lint Stage -lint:: - extends: .-base +lint:js: + extends: .bun-base stage: lint script: - - lint - - fmt --check + - bunx eslint . + - bunx prettier --check . allow_failure: false lint:rust: @@ -44,16 +45,16 @@ lint:rust: allow_failure: false # Build Stage -build:: - image: node:${NODE_VERSION} +build:js: + extends: .bun-base stage: build - before_script: - - npm install -g script: - - build + - mkdir -p bin + - bun build --compile --outfile ./bin/ubicity src/cli.js + - bun build --compile --outfile ./bin/ubicity-capture src/capture.js artifacts: paths: - - src-/**/*.res.js + - bin/ expire_in: 1 hour build:wasm: @@ -74,29 +75,29 @@ build:wasm: # Test Stage test:unit: - extends: .-base + extends: .bun-base stage: test dependencies: - - build: + - build:js - build:wasm script: - - test --allow-read --allow-write tests/ + - bun test --coverage tests/ coverage: '/\d+\.\d+% coverage/' test:integration: - extends: .-base + extends: .bun-base stage: test dependencies: - - build: + - build:js - build:wasm script: - - run --allow-read --allow-write src/cli.ts stats - - run --allow-read --allow-write src/cli.ts help + - bun run src/cli.js stats + - bun run src/cli.js help allow_failure: false # Verify Stage (RSR Compliance) verify:rsr-compliance: - extends: .-base + extends: .bun-base stage: verify script: - | @@ -127,7 +128,6 @@ verify:rsr-compliance: # Check type safety echo "Checking type safety..." test -f wasm/Cargo.toml && echo "✅ Rust WASM present" || (echo "❌ WASM missing" && exit 1) - test -f src-/UbiCity.res && echo "✅ present" || (echo "❌ missing" && exit 1) echo "" echo "✅ RSR Compliance: PASSED" @@ -135,7 +135,7 @@ verify:rsr-compliance: allow_failure: false verify:offline-first: - extends: .-base + extends: .bun-base stage: verify script: - | @@ -152,7 +152,7 @@ verify:offline-first: echo "✅ Offline-First: VERIFIED" verify:security: - extends: .-base + extends: .bun-base stage: verify script: - | @@ -178,12 +178,12 @@ verify:security: # Deploy Stage (for releases) deploy:pages: - extends: .-base + extends: .bun-base stage: deploy only: - tags script: - - run --allow-read --allow-write src/visualize.ts + - bun run src/visualize.js - mkdir -p public - cp ubicity-data/ubicity-map.html public/index.html artifacts: @@ -195,16 +195,16 @@ deploy:pages: # Release compilation (for tags) compile:release: - extends: .-base + extends: .bun-base stage: deploy only: - tags dependencies: - - build: + - build:js - build:wasm script: - - compile --allow-read --allow-write --output ./bin/ubicity src/cli.ts - - compile --allow-read --allow-write --output ./bin/ubicity-capture src/capture.ts + - bun build --compile --outfile ./bin/ubicity src/cli.js + - bun build --compile --outfile ./bin/ubicity-capture src/capture.js - ls -lh ./bin/ artifacts: paths: @@ -213,15 +213,15 @@ compile:release: # Nightly builds nightly: - extends: .-base + extends: .bun-base stage: build only: - schedules dependencies: - - build: + - build:js - build:wasm script: - - compile --allow-read --allow-write --output ./bin/ubicity-nightly src/cli.ts + - bun build --compile --outfile ./bin/ubicity-nightly src/cli.js artifacts: paths: - bin/ diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..a0ca075 --- /dev/null +++ b/bun.lock @@ -0,0 +1,52 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "ubicity", + "dependencies": { + "glob": "^11.0.0", + "zod": "^3.23.8", + }, + }, + }, + "packages": { + "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], + + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], + + "lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="], + + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2608b10 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "name": "ubicity", + "private": true, + "type": "module", + "dependencies": { + "glob": "^11.0.0", + "zod": "^3.23.8" + } +}