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 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') }} - 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@v5 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@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 }} tag: beta # 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)