From 22f74972e657598a0b4ac45db4fc19538abaee55 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Wed, 12 Oct 2022 16:31:29 +0200 Subject: [PATCH] Update GitHub Actions workflow --- .github/workflows/test.yml | 110 ++++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f5796d9..edbe4b85 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,3 @@ -# This is a basic workflow to help you get started with Actions - name: CI # Controls when the action will run. Triggers the workflow on push or pull request @@ -14,17 +12,54 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - name: Setup Node.js environment - uses: actions/setup-node@v1 + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 - - name: Install dependencies - run: npm ci + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: lts/* - - name: Run tests - run: npm test + # Re-use node_modules between runs until package-lock.json changes. + - name: Cache node_modules + id: internal-cache-node_modules + uses: actions/cache@v3 + with: + path: node_modules + key: internal-node_modules-ubuntu-latest.x-${{ 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@v3 + with: + path: ~/.elm + key: elm-${{ hashFiles('elm.json', 'elm-tooling.json', 'review/elm.json') }} + + - name: Install npm dependencies + 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 + + # Install tools from elm-tooling.json, unless we restored them from + # cache. package-lock.json and elm-tooling.json can change independently, + # so we need to install separately based on what was restored from cache. + # This is run even if we restored ~/.elm from cache to be 100% sure + # node_modules/.bin/ contains links to all your tools. `elm-tooling + # install` runs very fast when there’s nothing new to download so + # skipping the step doesn’t save much time. + - name: elm-tooling install + run: npx --no-install elm-tooling install + + - name: Run tests + run: npm test publish: needs: [test] # make sure all your other jobs succeed before trying to publish @@ -35,17 +70,62 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Node.js environment - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 + with: + node-version: lts/* - - name: Install dependencies + # Re-use node_modules between runs until package-lock.json changes. + - name: Cache node_modules + id: internal-cache-node_modules + uses: actions/cache@v3 + with: + path: node_modules + key: internal-node_modules-ubuntu-latest.x-${{ 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@v3 + with: + path: ~/.elm + key: elm-${{ hashFiles('elm.json', 'elm-tooling.json', 'review/elm.json') }} + + - name: Install npm dependencies + 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 + # Install tools from elm-tooling.json, unless we restored them from + # cache. package-lock.json and elm-tooling.json can change independently, + # so we need to install separately based on what was restored from cache. + # This is run even if we restored ~/.elm from cache to be 100% sure + # node_modules/.bin/ contains links to all your tools. `elm-tooling + # install` runs very fast when there’s nothing new to download so + # skipping the step doesn’t save much time. + - name: elm-tooling install + run: npx --no-install elm-tooling install + + - name: Check if package needs to be published + uses: dillonkearns/elm-publish-action@v1 + id: publish + with: + dry-run: true + path-to-elm: ./node_modules/.bin/elm + # Runs a single command using the runners shell - name: Elm Publish - uses: dillonkearns/elm-publish-action@master + if: steps.publish.outputs.is-publishable == 'true' + uses: dillonkearns/elm-publish-action@v1 with: # Token provided by GitHub github-token: ${{ secrets.GITHUB_TOKEN }}