33 Commits
v1 ... v9

Author SHA1 Message Date
b044cabb79 README: example that prints the number of the opened PR 2022-04-22 11:46:11 -07:00
c58b7816fa Expose the number of the opened PR 2022-04-22 11:46:11 -07:00
614f33eec2 Resurrect CI and update actions 2022-04-05 08:50:00 -07:00
a10510d383 Add: script for update flake lock
Take commands out of the `action.yml` file, and put it in a dedicated
shell script.
2022-04-05 08:50:00 -07:00
e00d99112b fix: Re-introduce inputs.pr-title
This is to allow users to override the PR title since the commit message as well as title are processed differently which may lead to errors in how they are displayed. For example, the commit message needs quotations to be escaped
2022-02-01 10:43:22 -08:00
aa902c3538 fix: Support Custom Commit Message 2022-02-01 10:43:22 -08:00
V7
8c2dfef874 docs: Add information about Cosmetic Changes 2022-02-01 10:43:22 -08:00
V7
e8bb9f761a feat(cosmetic): Add Support for setting PR Labels 2022-02-01 10:43:22 -08:00
V7
073d38a53e feat(cosmetic): Add Support for Custom PR Title 2022-02-01 10:43:22 -08:00
d65c4f4a49 Merge pull request #23 from DeterminateSystems/readme
README: organize "Running GitHub Actions CI" instructions into own section
2022-01-26 12:08:43 -05:00
bf4213a00e README: organize "Running GitHub Actions CI" instructions into own section 2022-01-26 08:35:46 -08:00
0c7c875acc allow to set different github token. 2022-01-26 08:35:20 -08:00
e2447fec26 Merge pull request #19 from DeterminateSystems/dont-use-script
Don't use an external script for multiple inputs
2021-12-03 15:07:52 -05:00
11002c9dd5 ci: validate YAML 2021-12-03 10:27:37 -08:00
2dc5d432c4 Don't use an external script for multiple inputs
All consumers would then have to bring this script into their repo,
since GitHub doesn't have something like Nix's string context.
2021-12-03 10:24:07 -08:00
30320f06f5 update: init action using ourself 2021-12-02 12:23:46 -08:00
a5526c5d9e ci: init, shellcheck job 2021-12-01 10:42:07 -08:00
b7a213c108 README: document updating specific inputs 2021-12-01 10:42:07 -08:00
4cc1e7b9cd README: update install-nix-action
As of v15, you don't need the janky install_url or install_options stuff
anymore.
2021-12-01 10:42:07 -08:00
0f6e7d684e Allow consumers to update specific flake inputs 2021-12-01 10:42:07 -08:00
8145cc6e00 Merge pull request #13 from DeterminateSystems/git-repo-spec
Git repo spec
2021-11-08 13:36:22 -05:00
d384d02476 PULL_REQUEST_TEMPLATE: init 2021-11-08 09:12:18 -08:00
1aae24f313 README: add contributing and testing sections 2021-11-08 09:12:18 -08:00
5a95cb6772 editorconfig: init 2021-11-05 09:01:07 -07:00
958240e9be README: demonstrate a weekly flake.lock update
It's arguably not that useful to be inundated with flake.lock update PRs
every day, so do it once a week on Sunday.
2021-10-27 11:17:14 -07:00
d884d497b3 Include instructions on running workflows in the PR body 2021-10-27 09:55:02 -07:00
127c635f94 Include the text about the update action in the PR body 2021-10-27 09:55:02 -07:00
ae7e289a74 Update README.md
Co-authored-by: Cole Helbling <cole.helbling@determinate.systems>
2021-10-27 09:55:02 -07:00
7a2785317e Show how to run GitHub Actions CI workflows 2021-10-27 09:55:02 -07:00
64a8cc193d Remove automatic Nix installation
There is currently no (easy) way to only enable a certain composite
action step when some input is set, so just don't automatically install
Nix at all.
2021-10-26 09:22:51 -07:00
127e3e96af README: suggest release instead of branch name 2021-10-19 12:02:03 -07:00
7c39594b7e README: add daily schedule to example 2021-10-19 12:02:03 -07:00
e26f7bb412 Add commit message to PR body 2021-10-19 12:00:50 -07:00
11 changed files with 340 additions and 12 deletions

15
.editorconfig Normal file
View File

@ -0,0 +1,15 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
[*.{yml,yaml}]
indent_size = 2

11
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,11 @@
##### Description
<!---
Please include a short description of what your PR does and / or the motivation
behind it
--->
##### Checklist
- [ ] Tested functionality against a test repository (see ["How to test changes"](../README.md#how-to-test-changes))
- [ ] Added or updated relevant documentation (leave unchecked if not applicable)

17
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,17 @@
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
shellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install Nix
uses: cachix/install-nix-action@v16
- name: Shellcheck
run: nix-shell --run 'shellcheck $(find . -type f -name "*.sh" -executable)'

19
.github/workflows/update.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: update-flake-lock
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 0'
jobs:
lockfile:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install Nix
uses: cachix/install-nix-action@v16
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Update flake.lock
uses: ./.

20
.github/workflows/validate.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Validate YAML
uses: nwisbeta/validate-yaml-schema@v1.0.3
with:
yamlSchemasJson: |
{
"https://json.schemastore.org/github-action.json": ["action.yml"]
}

127
README.md
View File

@ -2,7 +2,7 @@
This is a GitHub Action that will update your flake.lock file whenever it is run.
> NOTE: We hardcode the `install_url` to a relatively recent `nixUnstable` (`nix-2.5pre20211015_130284b` currently). If you need a newer version that includes a new feature or important bug fix, feel free to file an issue or send a PR bumping the `install_url` inside the [`action.yml`](action.yml)!
> **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.
## Example
@ -11,7 +11,9 @@ An example GitHub Action workflow using this action would look like the followin
```yaml
name: update-flake-lock
on:
workflow_dispatch:
workflow_dispatch: # allows manual triggering
schedule:
- cron: '0 0 * * 0' # runs weekly on Sunday at 00:00
jobs:
lockfile:
@ -19,8 +21,125 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v16
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@main
uses: DeterminateSystems/update-flake-lock@vX
with:
pr-title: "Update flake.lock" # Title of PR to be created
pr-labels: | # Labels to be set on the PR
dependencies
automated
```
To have this workflow run on a recurring basis, see the [GitHub Actions documentation on the `schedule` key](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#schedule).
## 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.
It is also possible to update specific inputs by specifying them in a space-separated list:
```yaml
name: update-flake-lock
on:
workflow_dispatch: # allows manual triggering
schedule:
- cron: '0 0 * * 0' # runs weekly on Sunday at 00:00
jobs:
lockfile:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v16
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@vX
with:
inputs: input1 input2 input3
```
## Example that prints the number of the created PR
```yaml
name: update-flake-lock
on:
workflow_dispatch: # allows manual triggering
schedule:
- cron: '0 0 * * 0' # runs weekly on Sunday at 00:00
jobs:
lockfile:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v16
with:
extra_nix_config: |
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- name: Update flake.lock
id: update
uses: DeterminateSystems/update-flake-lock@vX
with:
inputs: input1 input2 input3
- name: Print PR number
run: echo Pull request number is ${{ steps.update.outputs.pull-request-number }}.
```
## 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.
### Without a Personal Authentication Token
Without using a Personal Authentication Token, you can manually run the following to kick off a CI run:
```
git branch -D update_flake_lock_action
git fetch origin
git checkout update_flake_lock_action
git commit --amend --no-edit
git push origin update_flake_lock_action --force
```
### 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).
You can create a token by visiting https://github.com/settings/tokens and select at least the `repo` scope. Then, store this token in your repository secrets (i.e. 'https://github.com/<USER>/<REPO>/settings/secrets/actions') as `GH_TOKEN_FOR_UPDATES` and set up your workflow file like the following:
```yaml
name: update-flake-lock
on:
workflow_dispatch: # allows manual triggering
schedule:
- cron: '0 0 * * 1,4' # Run twice a week
jobs:
lockfile:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v16
- name: Update flake.lock
uses: DeterminateSystems/update-flake-lock@vX
with:
token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
```
## 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.
### 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.

View File

@ -1,24 +1,76 @@
name: 'Update flake.lock'
description: 'Update your flake.lock and send a PR'
inputs:
inputs:
description: 'A space-separated list of inputs to update. Leave empty to update all inputs.'
required: false
default: ''
token:
description: 'GITHUB_TOKEN or a `repo` scoped Personal Access Token (PAT)'
required: false
default: ${{ github.token }}
commit-msg:
description: 'The message provided with the commit'
required: false
default: "flake.lock: Update"
pr-title:
description: 'The title of the PR to be created'
required: false
default: "flake.lock: Update"
pr-labels:
description: 'A comma or newline separated list of labels to set on the Pull Request to be created'
required: false
default: ''
outputs:
pull-request-number:
description: 'The number of the opened pull request'
value: ${{ steps.create-pr.outputs.pull-request-number }}
runs:
using: "composite"
steps:
- uses: cachix/install-nix-action@v14
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.5pre20211015_130284b/install
extra_nix_config: |
experimental-features = nix-command flakes
- run: nix flake update --commit-lock-file
- run: $GITHUB_ACTION_PATH/update-flake-lock.sh
shell: bash
env:
GIT_AUTHOR_NAME: github-actions[bot]
GIT_AUTHOR_EMAIL: <github-actions[bot]@users.noreply.github.com>
GIT_COMMITTER_NAME: github-actions[bot]
GIT_COMMITTER_EMAIL: <github-actions[bot]@users.noreply.github.com>
TARGETS: ${{ inputs.inputs }}
COMMIT_MSG: ${{ inputs.commit-msg }}
- run: |
content="$(git log --format=%b -n 1)"
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
echo "::set-output name=msg::$content"
shell: bash
id: commit_message
- name: Create PR
id: create-pr
uses: peter-evans/create-pull-request@v3
with:
branch: update_flake_lock_action
delete-branch: true
title: "flake.lock: Update"
body: Automated changes by the [update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) GitHub Action.
title: ${{ inputs.pr-title }}
token: ${{ inputs.token }}
labels: ${{ inputs.pr-labels }}
body: |
Automated changes by the [update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) GitHub Action.
```
${{ steps.commit_message.outputs.msg }}
```
### Running GitHub Actions on this PR
GitHub Actions will not run workflows on pull requests which are opened by a GitHub Action.
To run GitHub Actions workflows on this PR, run:
```sh
git branch -D update_flake_lock_action
git fetch origin
git checkout update_flake_lock_action
git commit --amend --no-edit
git push origin update_flake_lock_action --force
```

27
flake.lock generated Normal file
View File

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1638263381,
"narHash": "sha256-1rZDxTw74ETuJEjwPfpMgY0sfx8Cv1tRNt3gibol574=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "7b031d0d99e8cdaf0b70457c0cb33f16c0c958bb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

30
flake.nix Normal file
View File

@ -0,0 +1,30 @@
{
description = "update-flake-lock";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
outputs =
{ self
, nixpkgs
}:
let
nameValuePair = name: value: { inherit name value; };
genAttrs = names: f: builtins.listToAttrs (map (n: nameValuePair n (f n)) names);
allSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
forAllSystems = f: genAttrs allSystems
(system: f {
inherit system;
pkgs = import nixpkgs { inherit system; };
});
in
{
devShell = forAllSystems
({ system, pkgs, ... }:
pkgs.stdenv.mkDerivation {
name = "update-flake-lock-devshell";
buildInputs = [ pkgs.shellcheck ];
src = self;
});
};
}

6
shell.nix Normal file
View File

@ -0,0 +1,6 @@
(import
(fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/99f1c2157fba4bfe6211a321fd0ee43199025dbf.tar.gz";
sha256 = "0x2jn3vrawwv9xp15674wjz9pixwjyj3j771izayl962zziivbx2";
})
{ src = ./.; }).shellNix

12
update-flake-lock.sh Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ -n "$TARGETS" ]]; then
inputs=()
for input in $TARGETS; do
inputs+=("--update-input" "$input")
done
nix flake lock "${inputs[@]}" --commit-lock-file --commit-lockfile-summary "$COMMIT_MSG"
else
nix flake update --commit-lock-file --commit-lockfile-summary "$COMMIT_MSG"
fi