From df59c85707eeb78d7ef541feb44751508b2ab737 Mon Sep 17 00:00:00 2001 From: Jacob Hummer Date: Mon, 5 Feb 2024 16:52:14 -0600 Subject: [PATCH 1/2] see if this works --- bun.lockb | Bin 37972 -> 0 bytes package-lock.json | 1000 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 15 +- src/main.ts | 146 ++++--- src/post.ts | 13 +- 5 files changed, 1081 insertions(+), 93 deletions(-) delete mode 100755 bun.lockb create mode 100644 package-lock.json diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 52692346600b0ddfceb526dbb45facf2ed23bc7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37972 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

Sq4Qy*-oN`Tp%02RZ)wzVZu_1*Cl zE_}juq3t8qFLDC=FF61M-PjuoxX=Ma(=(cdsM|&JK?M++6U}q}*TuROqxktq0E;@_RJY!ZrfCJOH$6k+ z_y*8A=dW@Bz^_@d+0*>K|z9|gR)zOD4)Uv&ZbUwO?JRjnX3ztR2l?yMy^ zDG9zr3BEqH0z%me^|=V-Xik6tczyyMArARJgs8i<`h|y710?bYI>HOW)^#nMHosmF zQ9r^JjTOF!L8I`OS{bPJFwxdjYpNq;rs`7=@B=-NStwX&YdZ*iegX_ViPKehWz@=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-http": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "@types/node-fetch": "^2.5.0", + "@types/tunnel": "^0.0.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.7", + "process": "^0.11.10", + "tslib": "^2.2.0", + "tunnel": "^0.0.6", + "uuid": "^8.3.0", + "xml2js": "^0.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@azure/core-http/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.5.4", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.0-preview.13", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.6.1", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/ms-rest-js": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.1.4", + "abort-controller": "^3.0.0", + "form-data": "^2.5.0", + "node-fetch": "^2.6.7", + "tslib": "^1.10.0", + "tunnel": "0.0.6", + "uuid": "^8.3.2", + "xml2js": "^0.5.0" + } + }, + "node_modules/@azure/ms-rest-js/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@azure/ms-rest-js/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@azure/storage-blob": { + "version": "12.17.0", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-http": "^3.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.4", + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "19.1.0", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.1.5", + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.4.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.3.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/request": { + "version": "8.1.6", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "12.4.0", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^19.1.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.7.0", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@oven/bun-darwin-aarch64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.0.26.tgz", + "integrity": "sha512-7FgUZz2EpMgFdEI9sA68bnHhrnrDBmCwcewpm6641HK0x2RIO1EcFl/7GKSGsD1JmbNfGqxYU16Sc+rgKFtXAg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-darwin-x64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.0.26.tgz", + "integrity": "sha512-kWO6ThQEMm4OPfqlhFlWrDRiIFtaUl//bRJfomOHE4BABaP9bdgHjDsaxt0pUWiKP9j9YnPFXtMw91iUbTbCWg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-darwin-x64-baseline": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.0.26.tgz", + "integrity": "sha512-ssVJJs6tAvVZKnCx5bXAXZ05nSbfLHJ4qD/XFlVYb+3aue81YhXzQpbsOr9DShv209rBp9756SqHs9KZH66cbQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-linux-aarch64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.0.26.tgz", + "integrity": "sha512-YSG6pOFMpXquGf3i4/Ta05NAlsSkiZVk5P5EAlfO1fnJANlkcu1QfD/IYvddQ5YY4aOTwlQFqA29pYxYj+2A/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oven/bun-linux-x64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.0.26.tgz", + "integrity": "sha512-ErEH7yBkWIt01qROMysM6ZQqz8epY+2DtQW0rfjKbaPm8JuEdZVyeA5zoKES3e2J37FUY073MdbwdzE5KPX2cQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oven/bun-linux-x64-baseline": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.0.26.tgz", + "integrity": "sha512-1EjD6t6BFkspGqTRqYGVSQw5eIktDsappweG+1yh/QpmhV95/vDKKoPGXCwoyeSoJIjJMl9VaApX8Fr1vpnUfA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@types/node": { + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "license": "MIT" + }, + "node_modules/@types/tunnel": { + "version": "0.0.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "license": "Apache-2.0" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/bun": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/bun/-/bun-1.0.26.tgz", + "integrity": "sha512-+aSzKvGLE9hWwCRDwvnhoMTDntCYEk5bKn16L0QGD0v630WJMPhazAMxaSJmfq6dSAtiqPpauPpmHbzwoGPjlQ==", + "cpu": [ + "arm64", + "x64" + ], + "hasInstallScript": true, + "os": [ + "darwin", + "linux" + ], + "bin": { + "bun": "bin/bun", + "bunx": "bin/bun" + }, + "optionalDependencies": { + "@oven/bun-darwin-aarch64": "1.0.26", + "@oven/bun-darwin-x64": "1.0.26", + "@oven/bun-darwin-x64-baseline": "1.0.26", + "@oven/bun-linux-aarch64": "1.0.26", + "@oven/bun-linux-x64": "1.0.26", + "@oven/bun-linux-x64-baseline": "1.0.26" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "license": "ISC" + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/form-data": { + "version": "2.5.1", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "5.28.2", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "license": "ISC" + }, + "node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + } + } +} diff --git a/package.json b/package.json index 6ef3df9..0016cb6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,5 @@ { "type": "module", - "packageManager": "bun@1.0.25", "dependencies": { "@actions/cache": "^3.2.3", "@actions/core": "^1.10.1", @@ -8,15 +7,13 @@ "@actions/glob": "^0.4.0", "@actions/tool-cache": "^2.0.1", "@octokit/auth-unauthenticated": "^5.0.1", - "execa": "^8.0.1", - "semver": "^7.5.4" - }, - "devDependencies": { - "@types/node": "^20.10.4", + "@types/node": "latest", "@types/semver": "^7.5.6", - "prettier": "^3.1.1", - "typescript": "^5.3.3", - "@types/bun": "latest" + "bun": "latest", + "execa": "^8.0.1", + "prettier": "^3.2.5", + "semver": "^7.5.6", + "typescript": "latest" }, "scripts": { "build": "bun build ./src/main.ts ./src/post.ts --outdir=dist --target=node", diff --git a/src/main.ts b/src/main.ts index f6f0642..ab236a5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,7 @@ import { delimiter, join } from "node:path"; import { chmod, cp, mkdir, readFile, rm, writeFile } from "node:fs/promises"; import * as cache from "@actions/cache"; import * as glob from "@actions/glob"; +import assert from "node:assert/strict"; const token = core.getInput("fontist-token"); const octokit = token @@ -19,83 +20,78 @@ const octokit = token }); const versionRaw = core.getInput("fontist-version"); +const versionRange = versionRaw === "latest" ? "*" : versionRaw; const tags = await octokit.paginate(octokit.rest.repos.listTags, { owner: "fontist", repo: "fontist", }); const versions = tags.map((tag) => tag.name.slice(1)); -const version = semver.maxSatisfying( - versions, - versionRaw === "latest" ? "*" : versionRaw, -)!; +const version = semver.maxSatisfying(versions, versionRange); +assert( + version, + `${versionRange} didn't match any ${JSON.stringify(versions)}}`, +); core.info(`Resolved version: v${version}`); -if (!version) throw new DOMException(`${versionRaw} resolved to ${version}`); const workflowCache = core.getBooleanInput("cache"); -if (workflowCache) { - core.info(`Using @actions/cache`); +const installationKey = `fontist-${version}-installation`; + +let found = tc.find("fontist", version); +let cacheHit = !!found; +if (!found) { + core.info(`Fontist v${version} not found in tool cache.`); + + const tempDir = join(process.env.RUNNER_TEMP!, Math.random().toString()); + await mkdir(tempDir); + + core.info( + `Attempting to restore Fontist installatioin from workflow cache: ${installationKey}`, + ); + const hitKey = await cache.restoreCache([tempDir], installationKey); + if (hitKey) { + core.info(`Restored Fontist installation from workflow cache: ${tempDir}`); + found = await tc.cacheDir(tempDir, "fontist", version); + } } +cacheHit ||= !!found; -let found: string; -let cacheHit = false; -install_fontist: { - found = tc.find("fontist", version); - if (found) { - core.info(`Found Fontist in tool cache: ${found}`); - cacheHit = true; - break install_fontist; - } +if (!found) { + core.info(`Fontist v${version} not found in workflow cache.`); + + const tempDir = join(process.env.RUNNER_TEMP!, Math.random().toString()); + await mkdir(tempDir); + + core.info(`Using RubyGems to install Fontist v${version}...`); + core.info(`Installing to ${join(tempDir, "install-dir")}`); + core.info(`Installing binaries to ${join(tempDir, "bindir")}`); + await $({ + stdio: "inherit", + })`gem install fontist --version ${version} --no-document --install-dir ${join(tempDir, "install-dir")} --bindir ${join(tempDir, "bindir")}`; + + core.info(`Creating wrapper scripts in ${join(tempDir, "bin")}...`); + await mkdir(join(tempDir, "bin")); - let cacheDir = join(process.env.RUNNER_TEMP!, Math.random().toString()); - await mkdir(cacheDir); - cacheDir = await tc.cacheDir(cacheDir, "fontist", version); - try { - if (workflowCache) { - const primaryKey = `fontist-${version}-tool-cache`; - core.info(`Attempting to restore from ${primaryKey}`) - const hitKey = await cache.restoreCache([cacheDir], primaryKey); - if (hitKey) { - core.info(`Restored Fontist from workflow cache: ${cacheDir}`) - found = cacheDir; - cacheHit = true; - break install_fontist; - } - } - - core.info(`Using RubyGems to install Fontist v${version}...`) - core.info(`Installing to ${join(cacheDir, "install-dir")}`) - core.info(`Installing binaries to ${join(cacheDir, "bindir")}`) - await $({ - stdio: "inherit", - })`gem install fontist --version ${version} --no-document --install-dir ${join(cacheDir, "install-dir")} --bindir ${join(cacheDir, "bindir")}`; - - core.info(`Creating wrapper scripts in ${join(cacheDir, "bin")}...`) - await mkdir(join(cacheDir, "bin")); - - const bash = `\ + const bash = `\ #!/bin/bash -export GEM_PATH=${join(cacheDir, "install-dir")} -export GEM_HOME=${join(cacheDir, "install-dir")} -exec ${join(cacheDir, "bindir", "fontist")} "$@"`; - await writeFile(join(cacheDir, "bin", "fontist"), bash); - await chmod(join(cacheDir, "bin", "fontist"), 0o755); +export GEM_PATH='${join(tempDir, "install-dir")}' +export GEM_HOME='${join(tempDir, "install-dir")}' +exec ${join(tempDir, "bindir", "fontist")} "$@"`; + await writeFile(join(tempDir, "bin", "fontist"), bash); + await chmod(join(tempDir, "bin", "fontist"), 0o755); - const cmd = `\ + const cmd = `\ @echo off\r -set GEM_PATH=${join(cacheDir, "install-dir")}\r -set GEM_HOME=${join(cacheDir, "install-dir")}\r -${join(cacheDir, "bindir", "fontist")} %*`; - await writeFile(join(cacheDir, "bin", "fontist.cmd"), cmd); - - } catch (error) { - await rm(cacheDir, { recursive: true, force: true }); - throw error; - } +set GEM_PATH=${join(tempDir, "install-dir")}\r +set GEM_HOME=${join(tempDir, "install-dir")}\r +${join(tempDir, "bindir", "fontist")} %*`; + await writeFile(join(tempDir, "bin", "fontist.cmd"), cmd); - if (workflowCache) { - core.info(`Trying to stash ${cacheDir} in workflow cache`) - await cache.saveCache([cacheDir], `fontist-${version}-tool-cache`); - } + found = await tc.cacheDir(tempDir, "fontist", version); +} + +if (workflowCache) { + core.info(`Caching Fontist installation in workflow cache...`); + await cache.saveCache([found], installationKey); } core.addPath(join(found, "bin")); @@ -104,27 +100,23 @@ core.info(`✅ Fontist v${version} installed!`); if (workflowCache) { const cacheDir = join(process.env.HOME!, ".fontist"); - const hash = await glob.hashFiles(core.getInput("cache-dependency-path")) + const cacheDependencyPath = core.getInput("cache-dependency-path"); + const hash = await glob.hashFiles(cacheDependencyPath); if (hash) { - const primaryKey = `fontist-${version}-home-fontist-${hash}`; - core.saveState("cache-primary-key", primaryKey); - core.info(`Attempting to restore ${cacheDir} from ${primaryKey}`); - const hitKey = await cache.restoreCache([cacheDir], primaryKey); - core.saveState("cache-hit", hitKey); - if (hitKey) { - core.info(`Restored ${cacheDir} from workflow cache: ${hitKey}`); - cacheHit = true; - } + const dataKey = `fontist-${version}-data-${hash}`; + core.saveState("cache-data-key", dataKey); + core.info( + `Attempting to restore ~/.fontist from workflow cache: ${dataKey}`, + ); + const hitKey = await cache.restoreCache([cacheDir], dataKey); + cacheHit ||= !!hitKey; } else { - core.info(`No manifest files found, skipping cache restore`); - core.info(`To enable cache, set the cache-dependency-path input OR create a manifest.yml file`) + core.info(`No files matched ${cacheDependencyPath}`); } } -core.setOutput("cache-hit", cacheHit); - core.info(`Running 'fontist update'...`); await $({ stdio: "inherit" })`fontist update`; -// This is an issue with '@actions/cache' somehow? https://github.com/actions/toolkit/issues/658 +// '@actions/cache' hangs unless we do this. process.exit(); diff --git a/src/post.ts b/src/post.ts index 04012cd..d812bd4 100644 --- a/src/post.ts +++ b/src/post.ts @@ -6,15 +6,14 @@ import { join } from "node:path"; if (core.getBooleanInput("cache")) { const cacheDir = join(process.env.HOME!, ".fontist"); - const primaryKey = core.getState("cache-primary-key"); - if (primaryKey) { - const hitKey = core.getState("cache-hit-key"); - core.info(`Saving ${cacheDir} with key ${primaryKey}`); - await cache.saveCache([cacheDir], primaryKey); + const dataKey = core.getState("cache-data-key"); + if (dataKey) { + core.info(`Saving ${cacheDir} with key ${dataKey}`); + await cache.saveCache([cacheDir], dataKey); } else { - core.info(`No cache key found, skipping cache save`) + core.info(`No cache-data-key. Skipping save.`); } } -// This is an issue with '@actions/cache' somehow? https://github.com/actions/toolkit/issues/658 +// '@actions/cache' hangs unless we do this. process.exit(); From aa3a7f1a26b3708d4532809ee0fcf15492746e03 Mon Sep 17 00:00:00 2001 From: Jacob Hummer Date: Mon, 5 Feb 2024 19:25:09 -0600 Subject: [PATCH 2/2] test with ~/.fontist populated --- .github/workflows/test-action.yml | 4 +++- test.yml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 test.yml diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index 55fd888..7b2bd7f 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -33,4 +33,6 @@ jobs: - run: bun install - run: bun run build - uses: ./ - - run: fontist list "Fira Code" + with: + cache-dependency-path: test.yml + - run: fontist manifest-install test.yml diff --git a/test.yml b/test.yml new file mode 100644 index 0000000..a3030d2 --- /dev/null +++ b/test.yml @@ -0,0 +1,2 @@ +Fira Code: +Fira Mono: \ No newline at end of file