Compare commits

..

13 Commits

Author SHA1 Message Date
c9b9c77f3b wait for nix-daemon socket 2019-11-19 14:08:06 +01:00
16107722cd re-setup nix.conf after installation 2019-11-19 12:48:58 +01:00
9420096b1d allow binary caches for runner user 2019-11-19 12:48:58 +01:00
15adaed2d7 expose nix executables also for runner user 2019-11-19 12:48:58 +01:00
addc7fa7a2 Merge pull request #12 from cachix/sandbox
Turn on daemon (multi-user) mode
2019-11-19 11:29:33 +01:00
b8c38b583f Turn on daemon (multi-user) mode 2019-11-19 11:22:13 +01:00
d1407282e6 Merge pull request #9 from cachix/catalina
Catalina
2019-11-13 16:52:08 +01:00
9130accbad try out catalina fix 2019-11-13 16:47:37 +01:00
9c08345130 add shell.nix for easier development 2019-11-07 10:19:07 +01:00
4ad20b153f Fix Catalina 2019-11-07 10:18:56 +01:00
65ed8d8b59 README: bump 2019-10-03 17:40:55 +02:00
e3eb20c3db README: hint to action options 2019-10-03 17:27:13 +02:00
2b219c86f3 Merge pull request #8 from cachix/5-max-jobs
fix #5: set max-jobs = auto
2019-10-03 17:26:22 +02:00
5 changed files with 103 additions and 32 deletions

View File

@ -6,7 +6,7 @@ jobs:
tests:
strategy:
matrix:
os: [ubuntu-18.04, macos]
os: [ubuntu-18.04, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v1
@ -17,4 +17,8 @@ jobs:
- run: yarn test
- name: Install Nix
uses: ./
- run: nix-env -iA cachix -f https://github.com/NixOS/nixpkgs/tarball/ab5863afada3c1b50fc43bf774b75ea71b287cde
- run: cat /etc/nix/nix.conf
# cachix should be available and be able to configure a cache
- run: cachix use cachix
- run: nix-build test.nix

View File

@ -18,10 +18,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: cachix/install-nix-action@v2
- uses: cachix/install-nix-action@v3
- run: nix-build
```
See [action.yml](action.yml) for all options.
See also [cachix-action](https://github.com/cachix/cachix-action) for
simple binary cache setup to speed up your builds and share binaries
with developers.

View File

@ -20,27 +20,52 @@ const core = __importStar(require("@actions/core"));
const exec = __importStar(require("@actions/exec"));
const tc = __importStar(require("@actions/tool-cache"));
const os_1 = require("os");
const fs_1 = require("fs");
function nixConf() {
return __awaiter(this, void 0, void 0, function* () {
// Workaround a segfault: https://github.com/NixOS/nix/issues/2733
yield exec.exec("sudo", ["mkdir", "-p", "/etc/nix"]);
yield exec.exec("sudo", ["sh", "-c", "echo http2 = false >> /etc/nix/nix.conf"]);
// Set jobs to number of cores
yield exec.exec("sudo", ["sh", "-c", "echo max-jobs = auto >> /etc/nix/nix.conf"]);
// Allow binary caches for runner user
yield exec.exec("sudo", ["sh", "-c", "echo trusted-users = root runner >> /etc/nix/nix.conf"]);
});
}
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
const home = os_1.homedir();
const { username } = os_1.userInfo();
const PATH = process.env.PATH;
const CERTS_PATH = home + '/.nix-profile/etc/ssl/certs/ca-bundle.crt';
// Workaround a segfault: https://github.com/NixOS/nix/issues/2733
yield exec.exec("sudo", ["mkdir", "-p", "/etc/nix"]);
yield exec.exec("sudo", ["sh", "-c", "echo http2 = false >> /etc/nix/nix.conf"]);
// Set jobs to number of cores
yield exec.exec("sudo", ["sh", "-c", "echo max-jobs = auto >> /etc/nix/nix.conf"]);
const INSTALL_PATH = '/opt/nix';
yield nixConf();
// Catalina workaround https://github.com/NixOS/nix/issues/2925
if (os_1.type() == "Darwin") {
yield exec.exec("sudo", ["sh", "-c", `echo \"nix\t${INSTALL_PATH}\" >> /etc/synthetic.conf`]);
yield exec.exec("sudo", ["sh", "-c", `mkdir -m 0755 ${INSTALL_PATH} && chown runner ${INSTALL_PATH}`]);
yield exec.exec("/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util", ["-B"]);
// Needed for sudo to pass NIX_IGNORE_SYMLINK_STORE
yield exec.exec("sudo", ["sh", "-c", "echo 'Defaults env_keep += NIX_IGNORE_SYMLINK_STORE' >> /etc/sudoers"]);
core.exportVariable('NIX_IGNORE_SYMLINK_STORE', "1");
// Needed for nix-daemon installation
yield exec.exec("sudo", ["launchctl", "setenv", "NIX_IGNORE_SYMLINK_STORE", "1"]);
}
// Needed due to multi-user being too defensive
core.exportVariable('ALLOW_PREEXISTING_INSTALLATION', "1");
// TODO: retry due to all the things that go wrong
const nixInstall = yield tc.downloadTool('https://nixos.org/nix/install');
yield exec.exec("sh", [nixInstall]);
core.exportVariable('PATH', `${PATH}:${home}/.nix-profile/bin`);
core.exportVariable('NIX_PATH', `/nix/var/nix/profiles/per-user/${username}/channels`);
// macOS needs certificates hints
if (fs_1.existsSync(CERTS_PATH)) {
core.exportVariable('NIX_SSL_CERT_FILE', CERTS_PATH);
yield exec.exec("sh", [nixInstall, "--daemon"]);
// write nix.conf again as installation overwrites it, reload the daemon to pick up changes
yield nixConf();
yield exec.exec("sudo", ["pkill", "-HUP", "nix-daemon"]);
// setup env
core.exportVariable('PATH', `${PATH}:/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/per-user/runner/profile/bin`);
core.exportVariable('NIX_PATH', `/nix/var/nix/profiles/per-user/root/channels`);
if (os_1.type() == "Darwin") {
// macOS needs certificates hints
core.exportVariable('NIX_SSL_CERT_FILE', '/nix/var/nix/profiles/default/etc/ssl/certs/ca-bundle.crt');
// TODO: nc doesn't work correctly on macOS :(
//await exec.exec("sh", ["-c", "while ! nc -zU /nix/var/nix/daemon-socket/socket; do sleep 0.5; done"]);
// macOS needs time to reload the daemon :(
yield exec.exec("sleep", ["10"]);
}
}
catch (error) {

8
shell.nix Normal file
View File

@ -0,0 +1,8 @@
{ pkgs ? import <nixpkgs> {}
}:
pkgs.mkShell {
name = "install-nix-action-shell";
buildInputs = [ pkgs.yarn ];
}

View File

@ -1,16 +1,9 @@
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as tc from '@actions/tool-cache';
import {homedir, userInfo} from 'os';
import {existsSync} from 'fs';
async function run() {
try {
const home = homedir();
const {username} = userInfo();
const PATH = process.env.PATH;
const CERTS_PATH = home + '/.nix-profile/etc/ssl/certs/ca-bundle.crt';
import {type} from 'os';
async function nixConf() {
// Workaround a segfault: https://github.com/NixOS/nix/issues/2733
await exec.exec("sudo", ["mkdir", "-p", "/etc/nix"]);
await exec.exec("sudo", ["sh", "-c", "echo http2 = false >> /etc/nix/nix.conf"]);
@ -18,16 +11,54 @@ async function run() {
// Set jobs to number of cores
await exec.exec("sudo", ["sh", "-c", "echo max-jobs = auto >> /etc/nix/nix.conf"]);
// Allow binary caches for runner user
await exec.exec("sudo", ["sh", "-c", "echo trusted-users = root runner >> /etc/nix/nix.conf"]);
}
async function run() {
try {
const PATH = process.env.PATH;
const INSTALL_PATH = '/opt/nix';
await nixConf();
// Catalina workaround https://github.com/NixOS/nix/issues/2925
if (type() == "Darwin") {
await exec.exec("sudo", ["sh", "-c", `echo \"nix\t${INSTALL_PATH}\" >> /etc/synthetic.conf`]);
await exec.exec("sudo", ["sh", "-c", `mkdir -m 0755 ${INSTALL_PATH} && chown runner ${INSTALL_PATH}`]);
await exec.exec("/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util", ["-B"]);
// Needed for sudo to pass NIX_IGNORE_SYMLINK_STORE
await exec.exec("sudo", ["sh", "-c", "echo 'Defaults env_keep += NIX_IGNORE_SYMLINK_STORE' >> /etc/sudoers"]);
core.exportVariable('NIX_IGNORE_SYMLINK_STORE', "1");
// Needed for nix-daemon installation
await exec.exec("sudo", ["launchctl", "setenv", "NIX_IGNORE_SYMLINK_STORE", "1"]);
}
// Needed due to multi-user being too defensive
core.exportVariable('ALLOW_PREEXISTING_INSTALLATION', "1");
// TODO: retry due to all the things that go wrong
const nixInstall = await tc.downloadTool('https://nixos.org/nix/install');
await exec.exec("sh", [nixInstall]);
core.exportVariable('PATH', `${PATH}:${home}/.nix-profile/bin`)
core.exportVariable('NIX_PATH', `/nix/var/nix/profiles/per-user/${username}/channels`)
await exec.exec("sh", [nixInstall, "--daemon"]);
// macOS needs certificates hints
if (existsSync(CERTS_PATH)) {
core.exportVariable('NIX_SSL_CERT_FILE', CERTS_PATH);
// write nix.conf again as installation overwrites it, reload the daemon to pick up changes
await nixConf();
await exec.exec("sudo", ["pkill", "-HUP", "nix-daemon"]);
// setup env
core.exportVariable('PATH', `${PATH}:/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/per-user/runner/profile/bin`)
core.exportVariable('NIX_PATH', `/nix/var/nix/profiles/per-user/root/channels`)
if (type() == "Darwin") {
// macOS needs certificates hints
core.exportVariable('NIX_SSL_CERT_FILE', '/nix/var/nix/profiles/default/etc/ssl/certs/ca-bundle.crt');
// TODO: nc doesn't work correctly on macOS :(
//await exec.exec("sh", ["-c", "while ! nc -zU /nix/var/nix/daemon-socket/socket; do sleep 0.5; done"]);
// macOS needs time to reload the daemon :(
await exec.exec("sleep", ["10"]);
}
} catch (error) {
core.setFailed(`Action failed with error: ${error}`);
throw(error);