55 Commits
Author SHA1 Message Date
Renée Kooi 14a1906c0d 2.1.0 2023-06-25 17:47:07 +02:00
Renée bc506fbfd1 Use github cache (#53)
* Cache the zig compiler locally

* logging

* npm update

* verboser

* os.arch

* debug

* log signal

* address https://github.com/actions/toolkit/issues/687

* correct path

* add a cache: false option

* share size

* zigpath

* path.join skull
2023-06-25 17:44:29 +02:00
Renée Kooi e24fd328aa 2.0.2 2023-05-18 14:32:14 +02:00
Renée d77db2eb23 Fix tool-cache usage (#45)
* cache log

* log

* log

* use resolved ver for cache

* build

* log cache

* log

* use version as key

* deps

* loggggggg

* method name

* improve log

* ci: tweak versions

* include version for commit deps

* trailing

* mistake
2023-05-18 13:30:28 +01:00
Automated ddee6faec6 Rebuild 2023-01-16 09:27:32 +00:00
dependabot[bot] dfa210dd0b Bump esbuild from 0.16.17 to 0.17.0 (#43)
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.16.17 to 0.17.0.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.16.17...v0.17.0)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 10:26:58 +01:00
Automated a64a1dc5e1 Rebuild 2022-12-07 09:13:10 +00:00
dependabot[bot] 64c2ecb313 Bump esbuild from 0.15.18 to 0.16.0 (#42)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-07 10:12:43 +01:00
Renée Kooi 869a4299cf 2.0.1 2022-11-07 13:46:57 +01:00
Renée Kooi 75b5fc3918 ci: maybe fix matrix 2022-11-07 13:42:28 +01:00
Renée Kooi 7784e301e8 update readme to v2 2022-11-07 13:38:56 +01:00
Renée Kooi 9566bb3e87 2.0.0 2022-11-07 13:37:05 +01:00
Renée Kooi 2cffe3f4a2 ci: remove 0.5.0 on nonworking platforms 2022-11-07 13:28:28 +01:00
Renée Kooi c2eddb6989 deps: use esbuild 2022-11-07 13:25:42 +01:00
Renée Kooi 8cf2a1296e deps: update standard 2022-11-07 13:21:01 +01:00
Renée Kooi 1ef867edef deps: update tool-cache 2022-11-07 13:20:38 +01:00
Renée Kooi 9f0698fd52 use master by default, fix #24 2022-11-07 13:19:37 +01:00
Renée Kooi bf730ebe84 deps: update ncc 2022-11-07 13:19:10 +01:00
Automated 632586c725 Rebuild 2022-11-07 12:13:54 +00:00
Renée Kooi 66631fd873 ci: update node.js, closes #40 (#41)
* ci: update node.js, closes #40

* ci: update matrix
2022-11-07 13:13:23 +01:00
dependabot[bot] 0cee191d07 Bump @vercel/ncc from 0.29.2 to 0.30.0 (#27)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-30 10:15:46 +02:00
Automated e2ed12d04c Rebuild 2021-08-20 15:14:33 +00:00
Renée Kooi cfbd20032e ci: test with zig 0.8.0 2021-08-20 17:14:06 +02:00
Automated 55609d477b Rebuild 2021-07-19 06:52:05 +00:00
dependabot[bot] d1113581f1 Bump @vercel/ncc from 0.28.6 to 0.29.0 (#23)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.28.6 to 0.29.0.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.28.6...0.29.0)

---
updated-dependencies:
- dependency-name: "@vercel/ncc"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-19 08:51:40 +02:00
Automated 8db8d637fe Rebuild 2021-05-01 11:10:35 +00:00
dependabot-preview[bot] 942865929d Upgrade to GitHub-native Dependabot (#22)
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-05-01 13:10:11 +02:00
Automated 8a2fb59d7a Rebuild 2021-04-06 09:59:19 +00:00
dependabot-preview[bot] c34989108a Bump @vercel/ncc from 0.27.0 to 0.28.0 (#21)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.27.0 to 0.28.0.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.27.0...0.28.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-04-06 11:58:50 +02:00
Automated 8a99a7c9ad Rebuild 2021-01-12 08:11:31 +00:00
dependabot-preview[bot] bcf8978f8e Bump @vercel/ncc from 0.26.2 to 0.27.0 (#20)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.26.2 to 0.27.0.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.26.2...0.27.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2021-01-12 09:11:06 +01:00
Automated 8c8dfa672b Rebuild 2020-12-18 10:15:11 +00:00
dependabot-preview[bot] 733ad9e5c7 Bump @vercel/ncc from 0.25.1 to 0.26.0 (#19)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.25.1 to 0.26.0.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.25.1...0.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-12-18 11:14:45 +01:00
Renée Kooi 41ae19e72e 1.3.0 2020-11-11 12:44:03 +01:00
Automated d9392a17cf Rebuild 2020-11-11 11:40:36 +00:00
Renée Kooi e3c946d422 try with newer zig 2020-11-11 12:40:03 +01:00
Renée Kooi d485d46e15 add tests for version to URL resolution 2020-11-11 12:38:41 +01:00
Renée Kooi ab441cce53 refactor 2020-11-11 12:27:49 +01:00
Renée Kooi a43b52f8f8 add commit hash syntax to readme 2020-11-11 12:17:26 +01:00
Code Hz 96923a5a7f allow use exact commit hash (#13) (#14) 2020-11-11 12:15:17 +01:00
dependabot-preview[bot] 945e912039 Bump standard from 15.0.1 to 16.0.1 (#16)
Bumps [standard](https://github.com/standard/standard) from 15.0.1 to 16.0.1.
- [Release notes](https://github.com/standard/standard/releases)
- [Changelog](https://github.com/standard/standard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/standard/compare/v15.0.1...v16.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-06 13:44:49 +01:00
Automated 24b561a760 Rebuild 2020-11-06 12:41:24 +00:00
dependabot-preview[bot] 694a6a80cf Bump @vercel/ncc from 0.24.1 to 0.25.0 (#17)
Bumps [@vercel/ncc](https://github.com/vercel/ncc) from 0.24.1 to 0.25.0.
- [Release notes](https://github.com/vercel/ncc/releases)
- [Commits](https://github.com/vercel/ncc/compare/0.24.1...0.25.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-11-06 13:40:47 +01:00
Automated 5360ef6587 Rebuild 2020-10-22 16:03:35 +00:00
dependabot-preview[bot] 633f3dcdd7 Bump standard from 14.3.4 to 15.0.0 (#12)
Bumps [standard](https://github.com/standard/standard) from 14.3.4 to 15.0.0.
- [Release notes](https://github.com/standard/standard/releases)
- [Changelog](https://github.com/standard/standard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/standard/compare/v14.3.4...v15.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-10-22 18:03:04 +02:00
Renée Kooi 7d7611829d 1.2.5 2020-10-11 18:21:10 +02:00
Automated 94c7f0924b Rebuild 2020-10-11 16:18:31 +00:00
Renée Kooi 1956e0fd25 trigger rebuild 2020-10-11 18:17:51 +02:00
Renée Kooi 3b3df5d7b4 1.2.4 2020-09-19 15:55:25 +02:00
Automated 5c615af1ba Rebuild 2020-09-19 13:52:14 +00:00
Renée Kooi 338494c8e7 @zeit/ncc → @vercel/ncc 2020-09-19 15:51:38 +02:00
Automated 0682612436 Rebuild 2020-05-18 07:46:44 +00:00
dependabot-preview[bot] e0b50aeddc Bump simple-get from 3.1.0 to 4.0.0 (#10) 2020-05-18 09:46:18 +02:00
Automated 9e94a59e72 Rebuild 2020-03-24 10:38:05 +00:00
dependabot-preview[bot] 8a91458b3f Bump @zeit/ncc from 0.21.1 to 0.22.0 (#9)
Bumps [@zeit/ncc](https://github.com/zeit/ncc) from 0.21.1 to 0.22.0.
- [Release notes](https://github.com/zeit/ncc/releases)
- [Commits](https://github.com/zeit/ncc/compare/0.21.1...0.22.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-24 11:37:38 +01:00
11 changed files with 64149 additions and 6915 deletions
+8
View File
@@ -0,0 +1,8 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 10
+1 -1
View File
@@ -9,7 +9,7 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- run: npm install - run: npm install
- uses: EndBug/add-and-commit@v4 - uses: EndBug/add-and-commit@v4
with: with:
+20 -11
View File
@@ -1,26 +1,35 @@
name: CI name: CI
on: push on: push
jobs: jobs:
lint: test:
name: Unit tests
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - name: Checkout sources
- uses: goto-bus-stop/standard-action@v1 uses: actions/checkout@v3
with: - name: Install dependencies
annotate: true run: npm install
env: - name: Run tests
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: npm test
smoke-test: smoke-test:
name: Build test
strategy: strategy:
fail-fast: false
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os: [ubuntu-latest, macos-latest, windows-latest]
zig-version: [0.5.0, master] zig-version: [0.7.0, 0.8.0, 0.9.0, 0.10.0]
include:
- os: ubuntu-latest
zig-version: 0.5.0
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v2 - name: Checkout sources
- uses: goto-bus-stop/setup-zig@default uses: actions/checkout@v3
- name: Install Zig
uses: goto-bus-stop/setup-zig@default
with: with:
version: ${{matrix.zig-version}} version: ${{matrix.zig-version}}
- run: zig build test - name: Run tests
run: zig build test
working-directory: test working-directory: test
+32 -1
View File
@@ -4,11 +4,42 @@ All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/). This project adheres to [Semantic Versioning](http://semver.org/).
## 2.1.0
* The action now caches compilers in your repository's Actions cache by default. This significantly
speeds up installs on average. [#53](https://github.com/goto-bus-stop/setup-zig/pull/53)
2.0.2 also had caching-related changes but they didn't actually do much, based on a misunderstanding
of what the `tool-cache` is for.
## 2.0.2
* Fix tool-cache usage, this should speed up the action if zig was already downloaded before. [#45](https://github.com/goto-bus-stop/setup-zig/pull/45)
## 2.0.1
* Update docs to v2
## 2.0.0
* Change `version` option default to `master`. See [#24](https://github.com/goto-bus-stop/setup-zig/issues/24)
## 1.3.0
* Support pinning to a specific commit of the zig compiler. ([@codehz](https://github.com/codehz) in [#14](https://github.com/goto-bus-stop/setup-zig/pull/14))
```yaml
uses: goto-bus-stop/setup-zig@v1
with:
version: 0.6.0+4b48fccad
```
* Add tests for the version -> URL resolution code.
## 1.2.5
* Update dependencies to fix #11.
## 1.2.4
* Update dependencies simple-get and ncc.
## 1.2.3 ## 1.2.3
* Configure Actions to build releases automatically. * Configure Actions to build releases automatically.
## 1.2.2 ## 1.2.2
* Update examples. (#7) * Update examples. ([#7](https://github.com/goto-bus-stop/setup-zig/pull/7))
* Upgrade dependencies. * Upgrade dependencies.
* Recommend using @v1 instead of pinning to a version. * Recommend using @v1 instead of pinning to a version.
+23 -9
View File
@@ -1,6 +1,6 @@
# setup-zig # setup-zig
Use the zig compiler in your Github Action Use the zig compiler in your Github Actions workflows
[Usage](#usage) - [License: Apache-2.0](#license) [Usage](#usage) - [License: Apache-2.0](#license)
@@ -17,35 +17,49 @@ jobs:
runs-on: ${{matrix.os}} runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: goto-bus-stop/setup-zig@v1 - uses: goto-bus-stop/setup-zig@v2
- run: zig build test - run: zig build test
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: goto-bus-stop/setup-zig@v1 - uses: goto-bus-stop/setup-zig@v2
- run: zig fmt --check src/*.zig - run: zig fmt --check src/*.zig
``` ```
Optionally set a Zig version: Optionally set a Zig version:
```yaml ```yaml
- uses: goto-bus-stop/setup-zig@v1 - uses: goto-bus-stop/setup-zig@v2
with: with:
version: 0.4.0 # The default is 0.5.0 version: 0.7.0
``` ```
To use the nightly builds, set: The default is to use the nightly `master` builds.
Or [pin to a specific commit](https://github.com/goto-bus-stop/setup-zig/issues/13) using `version+commithash` syntax:
```yaml ```yaml
- uses: goto-bus-stop/setup-zig@v1 - uses: goto-bus-stop/setup-zig@v2
with: with:
version: master version: 0.6.0+4b48fccad
``` ```
If you are running Zig on Windows machines, you need to make sure that your .zig files use \n line endings and not \r\n. The `actions/checkout` action auto-converts line endings to \r\n, so add a `.gitattributes` file: If you are running Zig on Windows machines, you need to make sure that your .zig files use \n line endings and not \r\n. The `actions/checkout` action auto-converts line endings to `\r\n` on Windows runners, so add a `.gitattributes` file:
``` ```
*.zig text eol=lf *.zig text eol=lf
``` ```
This action caches the downloaded compilers in your repository's Actions cache by default,
to reduce the load on the Zig Foundation's servers. Cached compilers are only about 60MB
each per version/OS/architecture.
If this is really bad for you for some reason you can disable the caching.
```yaml
- uses: goto-bus-stop/setup-zig@v2
with:
cache: false
```
## License ## License
[Apache-2.0](LICENSE.md) [Apache-2.0](LICENSE.md)
+6 -2
View File
@@ -8,7 +8,11 @@ inputs:
version: version:
description: 'Version of the zig compiler to use (must be 0.3.0 or up)' description: 'Version of the zig compiler to use (must be 0.3.0 or up)'
required: true required: true
default: '0.5.0' default: 'master'
cache:
description: 'Cache downloaded compilers for faster action runs. Strongly recommended.'
required: false
default: 'true'
runs: runs:
using: 'node12' using: 'node16'
main: 'dist/index.js' main: 'dist/index.js'
+63899 -6841
View File
File diff suppressed because one or more lines are too long
+47 -43
View File
@@ -1,73 +1,77 @@
'use strict'
const os = require('os') const os = require('os')
const path = require('path') const path = require('path')
const semver = require('semver') const semver = require('semver')
const get = require('simple-get').concat
const actions = require('@actions/core') const actions = require('@actions/core')
const cache = require('@actions/tool-cache') const cache = require('@actions/cache')
const toolCache = require('@actions/tool-cache')
const {
extForPlatform,
resolveCommit,
resolveVersion
} = require('./versions')
function getJSON (opts) { const TOOL_NAME = 'zig'
return new Promise((resolve, reject) => {
get({ ...opts, json: true }, (err, req, data) => {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
}
async function downloadZig (version) { async function downloadZig (platform, version, useCache = true) {
const host = { const ext = extForPlatform(platform)
linux: 'x86_64-linux',
darwin: 'x86_64-macos',
win32: 'x86_64-windows'
}[os.platform()] || os.platform()
const ext = {
linux: 'tar.xz',
darwin: 'tar.xz',
win32: 'zip'
}[os.platform()]
const index = await getJSON({ url: 'https://ziglang.org/download/index.json' }) const { downloadUrl, variantName, version: useVersion } = version.includes('+')
? resolveCommit(platform, version)
: await resolveVersion(platform, version)
const availableVersions = Object.keys(index) const cachedPath = toolCache.find(TOOL_NAME, useVersion)
const useVersion = semver.valid(version) if (cachedPath) {
? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version) actions.info(`using cached zig install: ${cachedPath}`)
: null return cachedPath
const meta = index[useVersion || version]
if (!meta || !meta[host]) {
throw new Error(`Could not find version ${version} for platform ${host}`)
} }
const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '') const cacheKey = `${TOOL_NAME}-${variantName}`
if (useCache) {
const restorePath = path.join(process.env.RUNNER_TOOL_CACHE, TOOL_NAME, useVersion, os.arch())
actions.info(`attempting restore of ${cacheKey} to ${restorePath}`)
const restoredKey = await cache.restoreCache([restorePath], cacheKey)
if (restoredKey) {
actions.info(`using cached zig install: ${restorePath}`)
return restorePath
}
}
const downloadPath = await cache.downloadTool(meta[host].tarball) actions.info(`no cached version found. downloading zig ${variantName}`)
const downloadPath = await toolCache.downloadTool(downloadUrl)
const zigPath = ext === 'zip' const zigPath = ext === 'zip'
? await cache.extractZip(downloadPath) ? await toolCache.extractZip(downloadPath)
: await cache.extractTar(downloadPath, undefined, 'x') : await toolCache.extractTar(downloadPath, undefined, 'x')
const binPath = path.join(zigPath, variantName) const binPath = path.join(zigPath, variantName)
const cachePath = await cache.cacheDir(binPath, 'zig', variantName) const cachePath = await toolCache.cacheDir(binPath, TOOL_NAME, useVersion)
if (useCache) {
actions.info(`adding zig ${useVersion} at ${cachePath} to local cache ${cacheKey}`)
await cache.saveCache([cachePath], cacheKey)
}
return cachePath return cachePath
} }
async function main () { async function main () {
const version = actions.getInput('version') || '0.5.0' const version = actions.getInput('version') || 'master'
const useCache = actions.getInput('cache') || 'true'
if (semver.valid(version) && semver.lt(version, '0.3.0')) { if (semver.valid(version) && semver.lt(version, '0.3.0')) {
actions.setFailed('This action does not work with Zig 0.1.0 and Zig 0.2.0') actions.setFailed('This action does not work with Zig 0.1.0 and Zig 0.2.0')
return return
} }
if (useCache !== 'false' && useCache !== 'true') {
let zigPath = cache.find('zig', version) actions.setFailed('`with.cache` must be "true" or "false"')
if (!zigPath) { return
zigPath = await downloadZig(version)
} }
const zigPath = await downloadZig(os.platform(), version, Boolean(useCache))
// Add the `zig` binary to the $PATH // Add the `zig` binary to the $PATH
actions.addPath(zigPath) actions.addPath(zigPath)
actions.info(`zig installed at ${zigPath}`)
} }
main().catch((err) => { main().catch((err) => {
+8 -7
View File
@@ -1,20 +1,21 @@
{ {
"name": "setup-zig", "name": "setup-zig",
"description": "Use the zig compiler in your Github Action", "description": "Use the zig compiler in your Github Action",
"version": "1.2.3", "version": "2.1.0",
"author": "Renée Kooi <renee@kooi.me>", "author": "Renée Kooi <renee@kooi.me>",
"bugs": { "bugs": {
"url": "https://github.com/goto-bus-stop/setup-zig/issues" "url": "https://github.com/goto-bus-stop/setup-zig/issues"
}, },
"dependencies": { "dependencies": {
"@actions/cache": "^3.2.1",
"@actions/core": "^1.2.2", "@actions/core": "^1.2.2",
"@actions/tool-cache": "^1.3.1", "@actions/tool-cache": "^2.0.1",
"semver": "^7.1.3", "semver": "^7.1.3",
"simple-get": "^3.1.0" "simple-get": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@zeit/ncc": "^0.21.1", "esbuild": "^0.18.8",
"standard": "^14.3.1" "standard": "^17.0.0"
}, },
"homepage": "https://github.com/goto-bus-stop/setup-zig", "homepage": "https://github.com/goto-bus-stop/setup-zig",
"keywords": [ "keywords": [
@@ -30,8 +31,8 @@
"url": "https://github.com/goto-bus-stop/setup-zig.git" "url": "https://github.com/goto-bus-stop/setup-zig.git"
}, },
"scripts": { "scripts": {
"prepare": "ncc build index.js -o dist", "prepare": "esbuild index.js --outdir=dist --keep-names --bundle --platform=node --target=node16",
"test": "standard" "test": "standard && node test"
}, },
"standard": { "standard": {
"ignore": [ "ignore": [
+36
View File
@@ -0,0 +1,36 @@
const assert = require('assert').strict
const {
resolveCommit,
resolveVersion
} = require('./versions')
async function test () {
assert.deepEqual(resolveCommit('linux', '0.6.0+4b48fccad'), {
downloadUrl: 'https://ziglang.org/builds/zig-linux-x86_64-0.6.0+4b48fccad.tar.xz',
variantName: 'zig-linux-x86_64-0.6.0+4b48fccad',
version: '0.6.0+4b48fccad'
})
assert.deepEqual(resolveCommit('win32', '0.6.0+4b48fccad'), {
downloadUrl: 'https://ziglang.org/builds/zig-windows-x86_64-0.6.0+4b48fccad.zip',
variantName: 'zig-windows-x86_64-0.6.0+4b48fccad',
version: '0.6.0+4b48fccad'
})
assert.deepEqual(await resolveVersion('linux', '0.7.0'), {
downloadUrl: 'https://ziglang.org/download/0.7.0/zig-linux-x86_64-0.7.0.tar.xz',
variantName: 'zig-linux-x86_64-0.7.0',
version: '0.7.0'
})
assert.deepEqual(await resolveVersion('win32', '0.4.0'), {
downloadUrl: 'https://ziglang.org/download/0.4.0/zig-windows-x86_64-0.4.0.zip',
variantName: 'zig-windows-x86_64-0.4.0',
version: '0.4.0'
})
await assert.doesNotReject(resolveVersion('linux', 'master'))
await assert.doesNotReject(resolveVersion('win32', 'master'))
}
test().catch((error) => {
console.error(error.stack)
process.exit(1)
})
+69
View File
@@ -0,0 +1,69 @@
const path = require('path')
const get = require('simple-get').concat
const semver = require('semver')
function extForPlatform (platform) {
return {
linux: 'tar.xz',
darwin: 'tar.xz',
win32: 'zip'
}[platform]
}
function resolveCommit (platform, version) {
const ext = extForPlatform(platform)
const addrhost = {
linux: 'linux-x86_64',
darwin: 'macos-x86_64',
win32: 'windows-x86_64'
}[platform]
const downloadUrl = `https://ziglang.org/builds/zig-${addrhost}-${version}.${ext}`
const variantName = `zig-${addrhost}-${version}`
return { downloadUrl, variantName, version }
}
function getJSON (opts) {
return new Promise((resolve, reject) => {
get({ ...opts, json: true }, (err, req, data) => {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
}
async function resolveVersion (platform, version) {
const ext = extForPlatform(platform)
const host = {
linux: 'x86_64-linux',
darwin: 'x86_64-macos',
win32: 'x86_64-windows'
}[platform] || platform
const index = await getJSON({ url: 'https://ziglang.org/download/index.json' })
const availableVersions = Object.keys(index)
const useVersion = semver.valid(version)
? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version)
: null
const meta = index[useVersion || version]
if (!meta || !meta[host]) {
throw new Error(`Could not find version ${useVersion || version} for platform ${host}`)
}
const downloadUrl = meta[host].tarball
const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '')
return { downloadUrl, variantName, version: useVersion || version }
}
module.exports = {
extForPlatform,
resolveCommit,
resolveVersion
}