Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

github-runners: init module #859

Merged
merged 1 commit into from
Feb 18, 2024
Merged

Conversation

veehaitch
Copy link
Contributor

Adds a new module which allows to configure multiple GitHub self-hosted runners on Darwin. The module is heavily inspired by the nixpkgs NixOS module. Its implementation differs in some ways:

  • There's currently no way to configure the user/group which runs the runner. All configured runners share the same user and group.
  • No automatic cleanup.
  • No advanced sandboxing apart from user/group isolation

Closes #582

Adds a new module which allows to configure multiple GitHub self-hosted
runners on Darwin. The module is heavily inspired by the nixpkgs NixOS
module. Its implementation differs in some ways:

- There's currently no way to configure the user/group which runs the
  runner. All configured runners share the same user and group.
- No automatic cleanup.
- No advanced sandboxing apart from user/group isolation
@domenkozar domenkozar merged commit 0e6857f into LnL7:master Feb 18, 2024
6 checks passed
@Enzime Enzime mentioned this pull request Feb 18, 2024
2 tasks
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 19, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS option
offers. This is a rather big overhaul:

- Copies the `options.nix` from the NixOS module with only minor
  adaptations.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 20, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS option
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the NixOS module with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`).
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 22, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS option
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the NixOS module with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`).
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 26, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS option
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the NixOS module with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`).
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 26, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS option
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the NixOS module with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`).
- Warn if a `tokenFile` points to the Nix store.
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 26, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS module
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the [NixOS module] with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `github-runner` user shared
  among all instances. Take care of creating your own users if that's
  not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`). It uses the following locations:
    * state: `/var/lib/github-runners/${name}`
    * logs: `/var/log/github-runners/${name}`
    * work: The value of `workDir` or `/var/run/github-runners/${name}`
            if (`workDir == null`).
  We have to create the logs directory before starting the service since
  launchd expects that the `Standard{Error,Out}Path` exist. We do this
  by prepending to `system.activationScripts.launchd.text`.
  All directories belong to the configured `user` and `group`.
- Warn if a `tokenFile` points to the Nix store.

[NixOS module]: https://github.com/NixOS/nixpkgs/blob/3c30c56/nixos/modules/services/continuous-integration/github-runner/options.nix
[`activationScripts.launchd.text`]: https://github.com/LnL7/nix-darwin/blob/bbde06b/modules/system/launchd.nix#L99-L123
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 26, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS module
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the [NixOS module] with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `_github-runner` user
  shared among all instances. Take care of creating your own users if
  that's not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`). It uses the following locations:
    * state: `/var/lib/github-runners/${name}`
    * logs: `/var/log/github-runners/${name}`
    * work: The value of `workDir` or `/var/run/github-runners/${name}`
            if (`workDir == null`).
  We have to create the logs directory before starting the service since
  launchd expects that the `Standard{Error,Out}Path` exist. We do this
  by prepending to [`system.activationScripts.launchd.text`].
  All directories belong to the configured `user` and `group`.
- Warn if a `tokenFile` points to the Nix store.

[NixOS module]: https://github.com/NixOS/nixpkgs/blob/3c30c56/nixos/modules/services/continuous-integration/github-runner/options.nix
[`system.activationScripts.launchd.text`]: https://github.com/LnL7/nix-darwin/blob/bbde06b/modules/system/launchd.nix#L99-L123
veehaitch added a commit to yaxitech/nix-darwin that referenced this pull request Feb 28, 2024
While LnL7#859 added basic support for configuring GitHub runners through
nix-darwin, it did not yet support all of the options the NixOS module
offers.

I am aware that this is a rather big overhaul. I think, however, that
it's worth it:

- Copies the `options.nix` from the [NixOS module] with only minor
  adaptations. This should help to keep track of any changes to it.
- Respect the `workDir` config option. So far, the implementation didn't
  even read the value of the option.
- Allow configuring a custom user and group.
  If both are `null`, nix-darwin manages the `_github-runner` user
  shared among all instances. Take care of creating your own users if
  that's not what you want.
- Also creates the necessary directories for state, logs and the working
  directory (unless `workDir != null`). It uses the following locations:
    * state: `/var/lib/github-runners/${name}`
    * logs: `/var/log/github-runners/${name}`
    * work: The value of `workDir` or `/var/run/github-runners/${name}`
            if (`workDir == null`).
  We have to create the logs directory before starting the service since
  launchd expects that the `Standard{Error,Out}Path` exist. We do this
  by prepending to [`system.activationScripts.launchd.text`].
  All directories belong to the configured `user` and `group`.
- Warn if a `tokenFile` points to the Nix store.

[NixOS module]: https://github.com/NixOS/nixpkgs/blob/3c30c56/nixos/modules/services/continuous-integration/github-runner/options.nix
[`system.activationScripts.launchd.text`]: https://github.com/LnL7/nix-darwin/blob/bbde06b/modules/system/launchd.nix#L99-L123
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Port github actions runners module from NixOS
2 participants