-
-
Notifications
You must be signed in to change notification settings - Fork 96
170 lines (163 loc) · 6.71 KB
/
ci.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
name: Elm CI
on:
push:
branches:
- master
pull_request:
branches:
- master
- serverless-latest
env:
SESSION_SECRET: hello
jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
# Re-use node_modules between runs until package-lock.json changes.
- name: Cache node_modules
id: cache-node_modules
uses: actions/cache@v2
with:
path: |
~/.cache/Cypress
node_modules
key: node_modules-node-v${{ matrix.node }}-1-${{ hashFiles('package-lock.json') }}
# Re-use ~/.elm between runs until elm.json, elm-tooling.json or
# review/elm.json changes. The Elm compiler saves downloaded Elm packages
# to ~/.elm, and elm-tooling saves downloaded tool executables there.
- name: Cache ~/.elm
uses: actions/cache@v2
with:
path: ~/.elm
key: elm-${{ hashFiles('elm.json', 'elm-tooling.json', 'generator/elm.json', 'review/elm.json', 'examples/routing/elm.json', 'examples/escaping/elm.json', 'examples/base-path/elm.json') }}
- name: Download lamdera
run: curl https://static.lamdera.com/bin/linux/lamdera-next-alpine-musl -o /usr/local/bin/lamdera && chmod a+x /usr/local/bin/lamdera
# Install npm packages, unless we restored them from cache.
# Since `npm ci` removes the node_modules folder before running it’s
# important to skip this step if cache was restored.
- name: npm ci
if: steps.cache-node_modules.outputs.cache-hit != 'true'
env:
# If you have a `"postinstall": "elm-tooling install"` script in your
# package.json, this turns it into a no-op. We’ll run it in the next
# step because of the caching. If elm-tooling.json changes but
# package-lock.json does not, the postinstall script needs running
# but this step won’t.
NO_ELM_TOOLING_INSTALL: 1
run: npm ci
- name: elm-tooling install
run: npx --no-install elm-tooling install
- name: Add elm-review, elm and elm-format to path
run: realpath node_modules/.bin >> $GITHUB_PATH
- uses: sparksp/elm-review-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Generator
run: npm run build:generator
- name: Tests
run: npm test
# - name: elm-format
# run: npx --no-install elm-format --validate src/ generator/src
- name: Build elm docs
id: docs
run: lamdera make --docs docs.json
- name: Setup for cypress
run: (cd examples/end-to-end && npm install && npx elm-tooling install && rm -rf elm-stuff && npx elm-pages gen && lamdera make app/Route/Index.elm)
- name: Cypress tests
uses: cypress-io/github-action@v6
with:
working-directory: examples/end-to-end
start: node ../../generator/src/cli.js dev --debug
wait-on: "http://localhost:1234"
wait-on-timeout: 120
- uses: actions/upload-artifact@v1
if: failure()
with:
name: cypress-screenshots
path: cypress/screenshots
- uses: actions/upload-artifact@v1
if: failure()
with:
name: cypress-videos
path: cypress/videos
- run: npx elm-tooling install
- name: Build base path example site
run: cd examples/base-path && npm install && npx elm-pages build --base elm-pages && cd ../..
- name: GitHub Pages Example Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/master' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./examples/base-path/dist
- name: Elm Publish
uses: dillonkearns/elm-publish-action@c42e6b74c43830ba50fcd0b5bd1a99baf3cb350f
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-elm: ./node_modules/.bin/elm
- id: npm-publish
if: github.ref == 'refs/heads/master'
uses: JS-DevTools/npm-publish@v1
with:
token: ${{ secrets.NPM_TOKEN }}
# windows-snapshots:
# runs-on: windows-latest
# steps:
# - uses: actions/checkout@v2
# - name: Download lamdera
# shell: bash
# run: mkdir bin && curl https://static.lamdera.com/bin/win/lamdera.exe -o ./bin/lamdera && chmod a+x ./bin/lamdera
# - name: Add Lamdera to path
# shell: bash
# run: echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
# - name: Confirm that lamdera is on path
# shell: bash
# run: lamdera --version && which lamdera
# - name: Use Node.js 16
# uses: actions/setup-node@v1
# with:
# node-version: 16
# # Re-use node_modules between runs until package-lock.json changes.
# - name: Cache node_modules
# id: cache-node_modules
# uses: actions/cache@v2
# with:
# path: |
# ~/.cache/Cypress
# node_modules
# key: node_modules-node-windows-v${{ matrix.node }}-${{ hashFiles('package-lock.json') }}
# - run: git config core.autocrlf true
# # Re-use ~/.elm between runs until elm.json, elm-tooling.json or
# # review/elm.json changes. The Elm compiler saves downloaded Elm packages
# # to ~/.elm, and elm-tooling saves downloaded tool executables there.
# - name: Cache ~/.elm
# uses: actions/cache@v2
# with:
# path: ~/.elm
# key: elm-windows-${{ hashFiles('elm.json', 'elm-tooling.json', 'generator/elm.json', 'review/elm.json') }}
# # Install npm packages, unless we restored them from cache.
# # Since `npm ci` removes the node_modules folder before running it’s
# # important to skip this step if cache was restored.
# - name: npm ci
# shell: bash
# if: steps.cache-node_modules.outputs.cache-hit != 'true'
# env:
# # If you have a `"postinstall": "elm-tooling install"` script in your
# # package.json, this turns it into a no-op. We’ll run it in the next
# # step because of the caching. If elm-tooling.json changes but
# # package-lock.json does not, the postinstall script needs running
# # but this step won’t.
# NO_ELM_TOOLING_INSTALL: 1
# run: npm ci
# - name: elm-tooling install
# shell: bash
# run: npx --no-install elm-tooling install
# # - name: Snapshot Tests
# # shell: bash
# # run: (cd examples/escaping && npm install && npm test) && (cd examples/base-path && npm install && npm test)