6
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -17,4 +17,8 @@ jobs: | ||||
|     - run: yarn test | ||||
|     - name: Install Nix | ||||
|       uses: ./ | ||||
|     - run: nix-build test.nix | ||||
|     - 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 | ||||
							
								
								
									
										27
									
								
								lib/main.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								lib/main.js
									
									
									
									
									
								
							| @@ -20,16 +20,23 @@ const core = __importStar(require("@actions/core")); | ||||
| const exec = __importStar(require("@actions/exec")); | ||||
| const tc = __importStar(require("@actions/tool-cache")); | ||||
| const os_1 = require("os"); | ||||
| 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 PATH = process.env.PATH; | ||||
|             const INSTALL_PATH = '/opt/nix'; | ||||
|             // 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"]); | ||||
|             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`]); | ||||
| @@ -46,11 +53,19 @@ function run() { | ||||
|             // 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, "--daemon"]); | ||||
|             core.exportVariable('PATH', `${PATH}:/nix/var/nix/profiles/default/bin`); | ||||
|             // 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) { | ||||
|   | ||||
							
								
								
									
										35
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								src/main.ts
									
									
									
									
									
								
							| @@ -1,14 +1,9 @@ | ||||
| import * as core from '@actions/core'; | ||||
| import * as exec from '@actions/exec'; | ||||
| import * as tc from '@actions/tool-cache'; | ||||
| import {homedir, userInfo, type} from 'os'; | ||||
| import {existsSync} from 'fs'; | ||||
|  | ||||
| async function run() { | ||||
|   try { | ||||
|     const PATH = process.env.PATH;   | ||||
|     const INSTALL_PATH = '/opt/nix'; | ||||
| 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"]); | ||||
| @@ -16,6 +11,17 @@ 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`]); | ||||
| @@ -35,13 +41,24 @@ async function run() { | ||||
|     // 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, "--daemon"]); | ||||
|     core.exportVariable('PATH', `${PATH}:/nix/var/nix/profiles/default/bin`) | ||||
|     core.exportVariable('NIX_PATH', `/nix/var/nix/profiles/per-user/root/channels`) | ||||
|  | ||||
|     // 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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user