summaryrefslogtreecommitdiff
path: root/.github/workflows/update-flake-inputs.yml
blob: c9d25894b4545cbb2cecf62e08fbd88517d2d7b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
name: Update flake inputs

on:
    workflow_dispatch:
    schedule:
        - cron: "0 0 * * *"

jobs:
    update-flake:
        runs-on: ubuntu-latest

        permissions:
            contents: write

        steps:
            - uses: actions/checkout@v4

            - name: Install Nix
              uses: nixbuild/nix-quick-install-action@v31
              with:
                  nix_conf: |
                      keep-env-derivations = true
                      keep-outputs = true

            - name: Restore and save Nix store
              uses: nix-community/cache-nix-action@v6
              with:
                  # restore and save a cache using this key
                  primary-key: nix-${{ hashFiles('**/*.nix', '**/flake.lock') }}
                  # if there's no cache hit, restore a cache by this prefix
                  restore-prefixes-first-match: nix-
                  # collect garbage until the Nix store size (in bytes) is at most this number
                  # before trying to save a new cache
                  # 1G = 1073741824
                  gc-max-store-size-linux: 1G
                  # do purge caches
                  purge: true
                  # purge all versions of the cache
                  purge-prefixes: nix-
                  # created more than this number of seconds ago
                  purge-created: 0
                  # or, last accessed more than this number of seconds ago
                  # relative to the start of the `Post Restore and save Nix store` phase
                  purge-last-accessed: 0
                  # except any version with the key that is the same as the `primary-key`
                  purge-primary-key: never

            - name: Update flake inputs
              run: nix flake update

            - name: Attempt to build flake
              run: nix build '.#with-shell'

            - name: Test modules
              run: |
                  result/bin/caelestia -v
                  result/bin/caelestia -h
                  result/bin/caelestia toggle -h
                  result/bin/caelestia scheme -h
                  result/bin/caelestia scheme list
                  result/bin/caelestia scheme get
                  result/bin/caelestia scheme set -n gruvbox -f hard -m dark -v content
                  result/bin/caelestia screenshot -h
                  result/bin/caelestia record -h
                  result/bin/caelestia clipboard -h
                  result/bin/caelestia emoji -h
                  result/bin/caelestia emoji
                  result/bin/caelestia wallpaper -h
                  result/bin/caelestia pip -h

            - name: Test graphical stuff
              env:
                  XDG_RUNTIME_DIR: /home/runner/runtime
                  WLR_BACKENDS: headless
                  WLR_LIBINPUT_NO_DEVICES: 1
                  WAYLAND_DISPLAY: wayland-1
                  GTK_USE_PORTAL: 0
              run: |
                  mkdir $XDG_RUNTIME_DIR
                  chown $USER $XDG_RUNTIME_DIR
                  chmod 0700 $XDG_RUNTIME_DIR

                  nix profile install 'nixpkgs#sway'
                  sway &
                  sleep 3  # Give Sway some time to start
                  result/bin/caelestia shell -d
                  sleep 3  # Give the shell some time to start (and die)

                  # Test CLI graphical modules
                  result/bin/caelestia clipboard &
                  result/bin/caelestia emoji -p &
                  result/bin/caelestia shell -s
                  result/bin/caelestia shell drawers list
                  result/bin/caelestia shell mpris list
                  result/bin/caelestia shell notifs clear

                  pgrep .quickshell-wra  # Fail job if shell died
                  result/bin/caelestia shell -k
                  killall sway  # Screw using IPC

            - name: Check for changes
              id: check
              run: echo modified=$(git diff --exit-code flake.lock && echo 'false' || echo 'true') >> $GITHUB_OUTPUT

            - name: Commit and push changes
              if: steps.check.outputs.modified == 'true'
              uses: EndBug/add-and-commit@v9
              with:
                  add: flake.lock
                  default_author: github_actions
                  message: "[CI] chore: update flake"