-
-
Notifications
You must be signed in to change notification settings - Fork 1
133 lines (113 loc) · 3.91 KB
/
stack.yml
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: Stack
on:
workflow_dispatch:
schedule:
- cron: '0 3 * * *'
jobs:
build:
name: Stack CI - Linux - ${{ matrix.resolver }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- resolver: lts-20
steps:
- name: Clone project
uses: actions/checkout@v4
- name: Clone X11
uses: actions/checkout@v4
with:
repository: xmonad/X11
path: X11
- name: Clone X11-xft
uses: actions/checkout@v4
with:
repository: xmonad/X11-xft
path: X11-xft
- name: Clone xmonad
uses: actions/checkout@v4
with:
repository: xmonad/xmonad
path: xmonad
- name: Clone xmonad-contrib
uses: actions/checkout@v4
with:
repository: xmonad/xmonad-contrib
path: xmonad-contrib
- name: Install C dependencies
run: |
set -ex
sudo apt update -y
sudo apt install -y \
libx11-dev \
libxext-dev \
libxft-dev \
libxinerama-dev \
libxrandr-dev \
libxss-dev \
#
- name: Refresh caches once a month
id: cache-date
# GHA writes caches on the first miss and then never updates them again;
# force updating the cache at least once a month. Additionally, the
# date is prefixed with an epoch number to let us manually refresh the
# cache when needed. This is a workaround for https://github.com/actions/cache/issues/2
run: |
date +date=1-%Y-%m >> $GITHUB_OUTPUT
- name: Cache Haskell package metadata
uses: actions/cache@v4
with:
path: ~/.stack/pantry
key: stack-pantry-${{ runner.os }}-${{ steps.cache-date.outputs.date }}
- name: Cache Haskell dependencies
uses: actions/cache@v4
with:
path: |
~/.stack/*
!~/.stack/pantry
!~/.stack/programs
key: stack-${{ runner.os }}-${{ matrix.resolver }}-${{ steps.cache-date.outputs.date }}-${{ hashFiles('stack.yaml') }}-${{ hashFiles('*/*.cabal') }}
restore-keys: |
stack-${{ runner.os }}-${{ matrix.resolver }}-${{ steps.cache-date.outputs.date }}-${{ hashFiles('stack.yaml') }}-
stack-${{ runner.os }}-${{ matrix.resolver }}-${{ steps.cache-date.outputs.date }}-
- name: Update hackage index
# always update index to prevent the shared ~/.stack/pantry cache from being empty
run: |
set -ex
stack update
- name: Build documentation
id: haddock
run: |
set -ex
# workaround for stack/pantry caching of github archives
sed -e "s/@{today}/@{$(date -u --iso-8601=seconds)}/" -i stack.yaml
stack haddock \
--fast --no-terminal \
--resolver=${{ matrix.resolver }} --system-ghc
read dir < <(
stack path \
--local-doc-root \
--resolver=${{ matrix.resolver }} --system-ghc
)
echo "dir=$dir" >> $GITHUB_OUTPUT
# make symlinks to package names without version so that we can link
# to the most recent documentation
./symlink-packages.sh "$dir"
touch "$dir"/.nojekyll
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.6.9
with:
branch: gh-pages
folder: ${{ steps.haddock.outputs.dir }}
single-commit: true # limit repo size
clean: false # don't break existing URIs
git-config-name: "github-actions[bot]"
git-config-email: "41898282+github-actions[bot]@users.noreply.github.com"
workflow-keepalive:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- uses: liskin/gh-workflow-keepalive@v1