name: Elm CI on: push: branches: - master pull_request: branches: - master jobs: main: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js 18 uses: actions/setup-node@v1 with: node-version: 18 # 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 }}-${{ 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') }} # 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: Lamdera Reset for tests run: rm -rf elm-stuff $HOME/.elm - 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: Global elm-format install run: npm i -g elm-format@0.8.5 - name: Add elm-review, elm and elm-format to path run: npm bin >> $GITHUB_PATH - name: Download lamdera run: curl https://static.lamdera.com/bin/osx/lamdera-next-alpine-musl -o /usr/local/bin/lamdera && chmod a+x /usr/local/bin/lamdera - name: Tests run: npm test - uses: sparksp/elm-review-action@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: elm-format run: npx --no-install elm-format --validate src/ generator/src - name: Build elm docs id: docs run: npx --no-install elm make --docs docs.json - name: Lamdera Reset for cypress run: yes | lamdera reset - name: Setup for cypress run: (cd examples/end-to-end && npm install && npx elm-tooling install && rm -rf elm-stuff && npx elm-pages codegen && lamdera make app/Route/Index.elm) - name: Cypress tests uses: cypress-io/github-action@v2 with: start: npm start wait-on: "http://localhost:1234" wait-on-timeout: 60 - 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@v1 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: 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 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: Download lamdera run: curl https://static.lamdera.com/bin/linux/lamdera -o node_modules/.bin/lamdera && chmod a+x node_modules/.bin/lamdera - name: Snapshot Tests run: npm run test:snapshot