188 lines
6.4 KiB
Markdown
188 lines
6.4 KiB
Markdown
<!-- Read these docs at https://shb.skarabox.com -->
|
|
# Contributing {#contributing}
|
|
|
|
All issues and Pull Requests are welcome!
|
|
|
|
- Use this project. Something does not make sense? Something's not working?
|
|
- Documentation. Something is not clear?
|
|
- New services. Have one of your preferred service not integrated yet?
|
|
- Better patterns. See something weird in the code?
|
|
|
|
For PRs, if they are substantial changes, please open an issue to
|
|
discuss the details first. More details in [the contributing section](https://shb.skarabox.com/contributing.html)
|
|
of the manual.
|
|
|
|
Issues that are being worked on are labeled with the [in progress][] label.
|
|
Before starting work on those, you might want to talk about it in the issue tracker
|
|
or in the [matrix][] channel.
|
|
|
|
The prioritized issues are those belonging to the [next milestone][milestone].
|
|
Those issues are not set in stone and I'd be very happy to solve
|
|
an issue an user has before scratching my own itch.
|
|
|
|
[in progress]: https://github.com/ibizaman/selfhostblocks/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22in%20progress%22
|
|
[matrix]: https://matrix.to/#/%23selfhostblocks%3Amatrix.org
|
|
[milestone]: https://github.com/ibizaman/selfhostblocks/milestones
|
|
first.
|
|
|
|
## Chat Support {#contributing-chat}
|
|
|
|
Come hang out in the [Matrix channel](https://matrix.to/#/%23selfhostblocks%3Amatrix.org). :)
|
|
|
|
## Upstream Changes {#contributing-upstream}
|
|
|
|
One important goal of SHB is to be the smallest amount of code above what is available in
|
|
[nixpkgs](https://github.com/NixOS/nixpkgs). It should be the minimum necessary to make packages
|
|
available there conform with the contracts. This way, there are less chance of breakage when nixpkgs
|
|
gets updated. I intend to upstream to nixpkgs as much of those as makes sense.
|
|
|
|
## Run tests {#contributing-runtests}
|
|
|
|
Run all tests:
|
|
|
|
```bash
|
|
$ nix flake check
|
|
# or
|
|
$ nix run github:Mic92/nix-fast-build -- --skip-cached --flake ".#checks.$(nix eval --raw --impure --expr builtins.currentSystem)"
|
|
```
|
|
|
|
Run one group of tests:
|
|
|
|
```bash
|
|
$ nix build .#checks.${system}.modules
|
|
$ nix build .#checks.${system}.vm_postgresql_peerAuth
|
|
```
|
|
|
|
Run one VM test interactively:
|
|
|
|
```bash
|
|
$ nix run .#checks.${system}.vm_postgresql_peerAuth.driverInteractive
|
|
```
|
|
|
|
When you get to the shell, run either `start_all()` or `test_script()`. The former just starts all
|
|
the VMs and service, then you can introspect. The latter also starts the VMs if they are not yet and
|
|
then will run the test script.
|
|
|
|
If the test includes playwright tests, you can see the playwright trace with:
|
|
|
|
```bash
|
|
$ nix run .#playwright -- show-trace $(nix eval .#checks.x86_64-linux.vm_grocy_basic --raw)/trace/0.zip
|
|
```
|
|
|
|
## Upload test results to CI {#contributing-upload}
|
|
|
|
Github actions do now have hardware acceleration, so running them there is not slow anymore. If
|
|
needed, the tests results can still be pushed to cachix so they can be reused in CI.
|
|
|
|
After running the `nix-fast-build` command from the previous section, run:
|
|
|
|
```bash
|
|
$ find . -type l -name "result-vm_*" | xargs readlink | nix run nixpkgs#cachix -- push selfhostblocks
|
|
```
|
|
|
|
## Deploy using colmena {#contributing-deploy-colmena}
|
|
|
|
```bash
|
|
$ nix run nixpkgs#colmena -- apply
|
|
```
|
|
|
|
## Use a local version of selfhostblocks {#contributing-localversion}
|
|
|
|
This works with any flake input you have. Either, change the `.url` field directly in you `flake.nix`:
|
|
|
|
```nix
|
|
selfhostblocks.url = "/home/me/projects/selfhostblocks";
|
|
```
|
|
|
|
Or override on the command line:
|
|
|
|
```bash
|
|
$ nix flake lock --override-input selfhostblocks ../selfhostblocks
|
|
```
|
|
|
|
I usually combine the override snippet above with deploying:
|
|
|
|
```bash
|
|
$ nix flake lock --override-input selfhostblocks ../selfhostblocks && nix run nixpkgs#colmena -- apply
|
|
```
|
|
|
|
## Diff changes {#contributing-diff}
|
|
|
|
First, you must know what to compare. You need to know the path to the nix store of what is already deployed and to what you will deploy.
|
|
|
|
### What is deployed {#contributing-diff-deployed}
|
|
|
|
To know what is deployed, either just stash the changes you made and run `build`:
|
|
|
|
```bash
|
|
$ nix run nixpkgs#colmena -- build
|
|
...
|
|
Built "/nix/store/yyw9rgn8v5jrn4657vwpg01ydq0hazgx-nixos-system-baryum-23.11pre-git"
|
|
```
|
|
|
|
Or ask the target machine:
|
|
|
|
```bash
|
|
$ nix run nixpkgs#colmena -- exec -v readlink -f /run/current-system
|
|
baryum | /nix/store/77n1hwhgmr9z0x3gs8z2g6cfx8gkr4nm-nixos-system-baryum-23.11pre-git
|
|
```
|
|
|
|
### What will get deployed {#contributing-diff-todeploy}
|
|
|
|
Assuming you made some changes, then instead of deploying with `apply`, just `build`:
|
|
|
|
```bash
|
|
$ nix run nixpkgs#colmena -- build
|
|
...
|
|
Built "/nix/store/16n1klx5cxkjpqhrdf0k12npx3vn5042-nixos-system-baryum-23.11pre-git"
|
|
```
|
|
|
|
### Get the full diff {#contributing-diff-full}
|
|
|
|
With `nix-diff`:
|
|
|
|
```
|
|
$ nix run nixpkgs#nix-diff -- \
|
|
/nix/store/yyw9rgn8v5jrn4657vwpg01ydq0hazgx-nixos-system-baryum-23.11pre-git \
|
|
/nix/store/16n1klx5cxkjpqhrdf0k12npx3vn5042-nixos-system-baryum-23.11pre-git \
|
|
--color always | less
|
|
```
|
|
|
|
### Get version bumps {#contributing-diff-version}
|
|
|
|
A nice summary of version changes can be produced with:
|
|
|
|
```bash
|
|
$ nix run nixpkgs#nvd -- diff \
|
|
/nix/store/yyw9rgn8v5jrn4657vwpg01ydq0hazgx-nixos-system-baryum-23.11pre-git \
|
|
/nix/store/16n1klx5cxkjpqhrdf0k12npx3vn5042-nixos-system-baryum-23.11pre-git \
|
|
```
|
|
|
|
## Generate random secret {#contributing-gensecret}
|
|
|
|
```bash
|
|
$ nix run nixpkgs#openssl -- rand -hex 64
|
|
```
|
|
|
|
## Links that helped {#contributing-links}
|
|
|
|
While creating NixOS tests:
|
|
|
|
- https://www.haskellforall.com/2020/11/how-to-use-nixos-for-lightweight.html
|
|
- https://nixos.org/manual/nixos/stable/index.html#sec-nixos-tests
|
|
|
|
While creating an XML config generator for Radarr:
|
|
|
|
- https://stackoverflow.com/questions/4906977/how-can-i-access-environment-variables-in-python
|
|
- https://stackoverflow.com/questions/7771011/how-can-i-parse-read-and-use-json-in-python
|
|
- https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/writers/scripts.nix
|
|
- https://stackoverflow.com/questions/43837691/how-to-package-a-single-python-script-with-nix
|
|
- https://ryantm.github.io/nixpkgs/languages-frameworks/python/#python
|
|
- https://ryantm.github.io/nixpkgs/hooks/python/#setup-hook-python
|
|
- https://ryantm.github.io/nixpkgs/builders/trivial-builders/
|
|
- https://discourse.nixos.org/t/basic-flake-run-existing-python-bash-script/19886
|
|
- https://docs.python.org/3/tutorial/inputoutput.html
|
|
- https://pypi.org/project/json2xml/
|
|
- https://www.geeksforgeeks.org/serialize-python-dictionary-to-xml/
|
|
- https://nixos.org/manual/nix/stable/language/builtins.html#builtins-toXML
|
|
- https://github.com/NixOS/nixpkgs/blob/master/pkgs/pkgs-lib/formats.nix
|