38 Commits
v1.2.1 ... v1

Author SHA1 Message Date
Renée Kooi
222d316fd3 1.4.0 2023-06-25 18:02:46 +02:00
Renée
3d1ffe6553 backport caching to v1 (#54)
* deps: use esbuild

* deps: update tool-cache

* 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

* 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

* target node12

* changelog: add 1.4.0
2023-06-25 18:02:21 +02:00
Renée Kooi
03aebe4822 Merge tag 'v1.3.0' into v1 2020-11-11 12:45:17 +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
0ad672a98e Merge tag 'v1.2.5' into v1 2020-10-11 18:23:18 +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
d69d6d7322 Merge tag 'v1.2.4' into v1 2020-09-19 15:55:48 +02:00
Renée Kooi
3b3df5d7b4 1.2.4 2020-09-19 15:55:25 +02:00
Renée Kooi
6674bba866 1.2.4 2020-09-19 15:54:49 +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
6ebc72da8e Rebuild 2020-09-19 13:51:08 +00: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
Renée Kooi
964137ae91 1.2.3 2020-03-07 16:11:43 +01:00
Renée Kooi
7e9cfe8742 Fix branding. 2020-03-07 16:08:23 +01:00
Renée Kooi
23860f7d57 Auto-rebuild dist files using Github Actions (#8)
* ci: auto-build the dist files

* Rebuild

* ci: only rebuild on release branches

* ci: support any version branch

Co-authored-by: Automated <github@asdf.kooi.me>
2020-03-07 16:05:55 +01:00
Renée Kooi
09b0beda20 1.2.2 2020-02-17 15:18:38 +01:00
Renée Kooi
5f4f8a2949 ci: unpin standard-action 2020-02-17 15:16:07 +01:00
Renée Kooi
70f70cd73c Upgrade dependencies. 2020-02-17 15:06:21 +01:00
Renée Kooi
fd90c085ba doc: recommend using @v1 instead of pinning to a version 2020-02-17 15:03:25 +01:00
Renée Kooi
d17d924695 ci: use actions/checkout v2 2020-02-17 15:03:12 +01:00
Alexis Brodeur
996c042d7e Update the examples (#7)
The version of this action provided in examples was out of date compared
to the version of the most recent release.

This difference means that features like `version: master` will not
work.
2020-02-08 11:00:21 +01:00
10 changed files with 64199 additions and 4715 deletions

21
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Build
on:
push:
branches:
- 'default'
- 'v[0-9]+'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- uses: EndBug/add-and-commit@v4
with:
add: dist
message: Rebuild
author_name: Automated
author_email: github@asdf.kooi.me
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

View File

@@ -1,26 +1,34 @@
name: CI
on: push
jobs:
lint:
test:
name: Unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: goto-bus-stop/standard-action@v1.0.0
with:
annotate: true
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Checkout sources
uses: actions/checkout@v3
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
smoke-test:
name: Build test
strategy:
matrix:
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}}
steps:
- uses: actions/checkout@v1
- uses: goto-bus-stop/setup-zig@default
- name: Checkout sources
uses: actions/checkout@v2
- name: Install Zig
uses: goto-bus-stop/setup-zig@default
with:
version: ${{matrix.zig-version}}
- run: zig build test
- name: Run tests
run: zig build test
working-directory: test

View File

@@ -4,6 +4,33 @@ All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## 1.4.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/54)
## 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
* Configure Actions to build releases automatically.
## 1.2.2
* Update examples. ([#7](https://github.com/goto-bus-stop/setup-zig/pull/7))
* Upgrade dependencies.
* Recommend using @v1 instead of pinning to a version.
## 1.2.1
* Make `version: master` actually work.

View File

@@ -1,6 +1,6 @@
# 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)
@@ -16,36 +16,55 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v1
- uses: goto-bus-stop/setup-zig@v1.0.0
- uses: actions/checkout@v2
- uses: goto-bus-stop/setup-zig@v1
- run: zig build test
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: goto-bus-stop/setup-zig@v1.0.0
- uses: actions/checkout@v2
- uses: goto-bus-stop/setup-zig@v1
- run: zig fmt --check src/*.zig
```
Optionally set a Zig version:
```yaml
- uses: goto-bus-stop/setup-zig@v1.0.0
- uses: goto-bus-stop/setup-zig@v1
with:
version: 0.4.0 # The default is 0.5.0
version: 0.7.0 # The default is 0.5.0
```
To use the nightly builds, set:
```yaml
- uses: goto-bus-stop/setup-zig@v1.0.0
- uses: goto-bus-stop/setup-zig@v1
with:
version: master
```
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:
Or [pin to a specific commit](https://github.com/goto-bus-stop/setup-zig/issues/13) using `version+commithash` syntax:
```yaml
- uses: goto-bus-stop/setup-zig@v1
with:
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` on Windows runners, so add a `.gitattributes` file:
```
*.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@v1
with:
cache: false
```
## License
[Apache-2.0](LICENSE.md)

View File

@@ -1,13 +1,18 @@
name: 'Setup Zig'
description: 'Setup a Zig compiler and add it to the path'
icon: play
color: orange
branding:
icon: play
color: orange
author: 'goto-bus-stop'
inputs:
version:
description: 'Version of the zig compiler to use (must be 0.3.0 or up)'
required: true
default: '0.5.0'
cache:
description: 'Cache downloaded compilers for faster action runs. Strongly recommended.'
required: false
default: 'true'
runs:
using: 'node12'
main: 'dist/index.js'

68578
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,73 +1,77 @@
'use strict'
const os = require('os')
const path = require('path')
const semver = require('semver')
const get = require('simple-get').concat
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) {
return new Promise((resolve, reject) => {
get({ ...opts, json: true }, (err, req, data) => {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
}
const TOOL_NAME = 'zig'
async function downloadZig (version) {
const host = {
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()]
async function downloadZig (platform, version, useCache = true) {
const ext = extForPlatform(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 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 ${version} for platform ${host}`)
const cachedPath = toolCache.find(TOOL_NAME, useVersion)
if (cachedPath) {
actions.info(`using cached zig install: ${cachedPath}`)
return cachedPath
}
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'
? await cache.extractZip(downloadPath)
: await cache.extractTar(downloadPath, undefined, 'x')
? await toolCache.extractZip(downloadPath)
: await toolCache.extractTar(downloadPath, undefined, 'x')
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
}
async function main () {
const version = actions.getInput('version') || '0.5.0'
const useCache = actions.getInput('cache') || 'true'
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')
return
}
let zigPath = cache.find('zig', version)
if (!zigPath) {
zigPath = await downloadZig(version)
if (useCache !== 'false' && useCache !== 'true') {
actions.setFailed('`with.cache` must be "true" or "false"')
return
}
const zigPath = await downloadZig(os.platform(), version, Boolean(useCache))
// Add the `zig` binary to the $PATH
actions.addPath(zigPath)
actions.info(`zig installed at ${zigPath}`)
}
main().catch((err) => {

View File

@@ -1,20 +1,21 @@
{
"name": "setup-zig",
"description": "Use the zig compiler in your Github Action",
"version": "1.2.1",
"version": "1.4.0",
"author": "Renée Kooi <renee@kooi.me>",
"bugs": {
"url": "https://github.com/goto-bus-stop/setup-zig/issues"
},
"dependencies": {
"@actions/core": "^1.1.3",
"@actions/tool-cache": "^1.1.2",
"semver": "^6.3.0",
"simple-get": "^3.1.0"
"@actions/cache": "^3.2.1",
"@actions/core": "^1.2.2",
"@actions/tool-cache": "^2.0.1",
"semver": "^7.1.3",
"simple-get": "^4.0.0"
},
"devDependencies": {
"@zeit/ncc": "^0.20.5",
"standard": "^14.3.1"
"esbuild": "^0.18.8",
"standard": "^17.0.0"
},
"homepage": "https://github.com/goto-bus-stop/setup-zig",
"keywords": [
@@ -30,8 +31,8 @@
"url": "https://github.com/goto-bus-stop/setup-zig.git"
},
"scripts": {
"prepare": "ncc build index.js -o dist",
"test": "standard"
"prepare": "esbuild index.js --outdir=dist --keep-names --bundle --platform=node --target=node12",
"test": "standard && node test"
},
"standard": {
"ignore": [

36
test.js Normal file
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
versions.js Normal file
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
}