From ad4544a038f1d99dd172ff93a1ce29e7b6800e92 Mon Sep 17 00:00:00 2001 From: Luc Perkins Date: Fri, 18 Apr 2025 15:23:17 -0300 Subject: [PATCH] Use Determinate Nix in examples --- .github/workflows/ci.yml | 9 +- .github/workflows/update.yml | 7 +- .github/workflows/validate.yml | 1 + README.md | 145 +++++++++++++++++++++------------ 4 files changed, 105 insertions(+), 57 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de625ce..b627156 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,5 @@ name: CI + on: pull_request: push: @@ -11,8 +12,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install Nix + - name: Check Nixpkgs + uses: DeterminateSystems/flake-checker-action@main + with: + fail-mode: true + - name: Install Determinate Nix uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Enable FlakeHub Cache uses: DeterminateSystems/flakehub-cache-action@main - name: Install pnpm dependencies diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index 2397858..e9e18ab 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -1,4 +1,5 @@ name: update-flake-lock + on: workflow_dispatch: schedule: @@ -10,10 +11,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Check flake - uses: DeterminateSystems/flake-checker-action@main - - name: Install Nix + - name: Install Determinate Nix uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Enable FlakeHub Cache uses: DeterminateSystems/flakehub-cache-action@main - name: Update flake.lock diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index a5de3ce..a59745a 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -1,4 +1,5 @@ name: CI + on: pull_request: push: diff --git a/README.md b/README.md index 834e17f..42a1b34 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,18 @@ # update-flake-lock -This is a GitHub Action that will update your flake.lock file whenever it is run. +This is a GitHub Action that updates the [`flake.lock`][lockfile] file for your [Nix flake][flakes] whenever it is run. -> **NOTE:** As of v3, this action will no longer automatically install Nix to the action runner. You **MUST** set up a Nix with flakes support enabled prior to running this action, or your workflow will not function as expected. +> [!NOTE] +> As of v3, this action no longer automatically installs [Determinate Nix][det-nix] to the action runner. +> You **must** set up Nix with flakes support enabled prior to running this action or your workflow will not function as expected. ## Example -An example GitHub Action workflow using this action would look like the following: +Here's an example GitHub Action workflow using this Action: ```yaml name: update-flake-lock + on: workflow_dispatch: # allows manual triggering schedule: @@ -21,8 +24,10 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix + - name: Install Determinate Nix uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock uses: DeterminateSystems/update-flake-lock@main with: @@ -34,12 +39,14 @@ jobs: ## Example updating specific input(s) -> **NOTE**: If any inputs have a stale reference (e.g. the lockfile thinks a git input wants its "ref" to be "nixos-unstable", but the flake.nix specifies "nixos-unstable-small"), they will also be updated. At this time, there is no known workaround. +> [!NOTE] +> If any inputs have a stale reference (e.g. the lockfile thinks a git input wants its "ref" to be "nixos-unstable", but the flake.nix specifies "nixos-unstable-small"), they are also updated. At this time, there is no known workaround. -It is also possible to update specific inputs by specifying them in a space-separated list: +It's also possible to update specific [flake inputs][inputs] by specifying them in a space-separated list: ```yaml name: update-flake-lock + on: workflow_dispatch: # allows manual triggering schedule: @@ -51,17 +58,19 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: inputs: input1 input2 input3 ``` ## Example adding options to nix command -It is also possible to use specific options to the nix command in a space separated list: +It's also possible to use specific options to the `nix` command in a space-separated list: ```yaml name: update-flake-lock @@ -76,10 +85,12 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: nix-options: --debug --log-format raw ``` @@ -99,11 +110,13 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock id: update - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: inputs: input1 input2 input3 - name: Print PR number @@ -128,11 +141,13 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock if: ${{ github.event_name != 'pull_request' }} - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: inputs: input1 input2 input3 path-to-flake-dir: 'nix/' # in this example our flake doesn't sit at the root of the repository, it sits under 'nix/flake.nix' @@ -155,20 +170,23 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 - - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main with: - git-author-name: 'Jane Author' - git-author-email: 'github-actions[bot]@users.noreply.github.com' - git-committer-name: 'John Committer' - git-committer-email: 'github-actions[bot]@users.noreply.github.com' + determinate: true + - name: Update flake.lock + uses: DeterminateSystems/update-flake-lock@main + with: + git-author-name: Jane Author + git-author-email: github-actions[bot]@users.noreply.github.com + git-committer-name: John Committer + git-committer-email: github-actions[bot]@users.noreply.github.com ``` ## Running GitHub Actions CI -GitHub Actions will not run workflows when a branch is pushed by or a PR is opened by a GitHub Action. There are two ways to have GitHub Actions CI run on a PR submitted by this action. +GitHub Actions doesn't run workflows when a branch is pushed by or a PR is opened by a GitHub Action. +There are two ways to have GitHub Actions CI run on a PR submitted by this action. ### Without a Personal Authentication Token @@ -176,7 +194,7 @@ Without using a Personal Authentication Token, close and reopen the pull request ### With a Personal Authentication Token -By providing a Personal Authentication Token, the PR will be submitted in a way that bypasses this limitation (GitHub will essentially think it is the owner of the PAT submitting the PR, and not an Action). +By providing a Personal Authentication Token, the PR is submitted in a way that bypasses this limitation (GitHub essentially thinks it's the owner of the PAT submitting the PR, and not an Action). You can create a token by visiting https://github.com/settings/tokens and select at least the `repo` scope. For the new fine-grained tokens, you need to enable read and write access for "Contents" and "Pull Requests" permissions. Then, store this token in your repository secrets (i.e. `https://github.com///settings/secrets/actions`) as `GH_TOKEN_FOR_UPDATES` and set up your workflow file like the following: ```yaml @@ -192,30 +210,36 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} ``` ## With GPG commit signing -It's possible for the bot to produce GPG signed commits. Associating a GPG public key to a github user account is not required but it is necessary if you want the signed commits to appear as verified in Github. This can be a compliance requirement in some cases. +It's possible for the bot to produce GPG-signed commits. +Associating a GPG public key to a GitHub user account isn't required but it *is* necessary if you want the signed commits to appear as verified in Github. +This can be a compliance requirement in some cases. -You can follow [Github's guide on creating and/or adding a new GPG key to an user account](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-new-gpg-key-to-your-github-account). Using a specific github user account for the bot can be a good security measure to dissociate this bot's actions and commits from your personal github account. +You can follow [GitHub's guide to creating and/or adding a new GPG key to an user account](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-new-gpg-key-to-your-github-account). +Using a specific GitHub user account for the bot can be a good security measure to dissociate this bot's actions and commits from your personal GitHub account. -For the bot to produce signed commits, you will have to provide the GPG private keys to this action's input parameters. You can safely do that with [Github secrets as explained here](https://github.com/crazy-max/ghaction-import-gpg#prerequisites). +For the bot to produce signed commits, you need to provide the GPG private keys to this action's input parameters. You can safely do that with [Github secrets as explained here](https://github.com/crazy-max/ghaction-import-gpg#prerequisites). When using commit signing, the commit author name and email for the commits produced by this bot would correspond to the ones associated to the GPG Public Key. If you want to sign using a subkey, you must specify the subkey fingerprint using the `gpg-fingerprint` input parameter. -You can find an example of how to using this action with commit signing below: +Here's an example of how to using this action with commit signing: ```yaml name: update-flake-lock + on: workflow_dispatch: # allows manual triggering schedule: @@ -227,10 +251,12 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: sign-commits: true gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} @@ -240,18 +266,19 @@ jobs: ## Custom PR Body -By default the generated PR body is set to be the following template: +By default, the generated PR body uses this template: ````handlebars Automated changes by the [update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) GitHub Action. -``` +```` {{ env.GIT_COMMIT_MESSAGE }} +```` ``` ### Running GitHub Actions on this PR -GitHub Actions will not run workflows on pull requests which are opened by a GitHub Action. +GitHub Actions doesn't run workflows on pull requests that are opened by a GitHub Action. To run GitHub Actions workflows on this PR, run: @@ -264,12 +291,14 @@ git push origin update_flake_lock_action --force ``` ```` -However you can customize it, with variable interpolation performed with [Handlebars](https://handlebarsjs.com/). This allows you to customize the template with the following variables: -- env.GIT_AUTHOR_NAME -- env.GIT_AUTHOR_EMAIL -- env.GIT_COMMITTER_NAME -- env.GIT_COMMITTER_EMAIL -- env.GIT_COMMIT_MESSAGE +You can customize it, however, using variable interpolation performed with [Handlebars]. +This enables you to customize the template with these variables: + +- `env.GIT_AUTHOR_NAME` +- `env.GIT_AUTHOR_EMAIL` +- `env.GIT_COMMITTER_NAME` +- `env.GIT_COMMITTER_EMAIL` +- `env.GIT_COMMIT_MESSAGE` ## Add assignees or reviewers @@ -289,10 +318,12 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Nix - uses: DeterminateSystems/nix-installer-action@v1 + - name: Install Determinate Nix + uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true - name: Update flake.lock - uses: DeterminateSystems/update-flake-lock@vX + uses: DeterminateSystems/update-flake-lock@main with: pr-assignees: SomeGitHubUsername pr-reviewers: SomeOtherGitHubUsername,SomeThirdGitHubUsername @@ -300,8 +331,16 @@ jobs: ## Contributing -Feel free to send a PR or open an issue if you find something functions unexpectedly! Please make sure to test your changes and update any related documentation before submitting your PR. +Feel free to send a PR or open an issue if you find that something functions unexpectedly! +Please make sure to test your changes and update any related documentation before submitting your PR. ### How to test changes -In order to more easily test your changes to this action, we have created a template repository that should point you in the right direction: https://github.com/DeterminateSystems/update-flake-lock-test-template. Please see the README in that repository for instructions on testing your changes. +In order to more easily test your changes to this action, we have created a template repository that should point you in the right direction: https://github.com/DeterminateSystems/update-flake-lock-test-template. +Please see the README in that repository for instructions on testing your changes. + +[det-nix]: https://docs.determinate.systems/determinate-nix +[flakes]: https://zero-to-nix.com/concepts/flakes +[handlebars]: https://handlebarsjs.com +[inputs]: https://zero-to-nix.com/concepts/flakes/#inputs +[lockfile]: https://zero-to-nix.com/concepts/flakes/#lockfile