CI (#523) #2008
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Ppx CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
OPAM_VERSION: 2.3.0 | |
DUNE_PROFILE: release | |
permissions: | |
contents: write | |
pull-requests: write | |
defaults: | |
run: | |
shell: bash -xeuo pipefail {0} | |
jobs: | |
build: | |
name: Build | |
strategy: | |
matrix: | |
os: [ubuntu-20.04, macos-latest] # Missing windows-latest | |
ocaml-compiler: | |
- 5.2.0 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js | |
uses: actions/setup-node@v3 | |
- name: Load opam cache | |
id: opam-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: | | |
${{ runner.tool_cache }}/opam | |
~/.opam | |
_opam | |
.opam-path | |
key: opam-${{ matrix.os }}-${{ matrix.ocaml-compiler }}-${{ hashFiles('**.opam') }} | |
- name: Use OCaml ${{ matrix.ocaml-compiler }} | |
uses: ocaml/[email protected] | |
if: steps.opam-cache.outputs.cache-hit != 'true' | |
with: | |
ocaml-compiler: ${{ matrix.ocaml-compiler }} | |
dune-cache: false | |
opam-disable-sandboxing: true | |
- name: Get OPAM executable path | |
if: steps.opam-cache.outputs.cache-hit != 'true' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const opam_path = await io.which('opam', true); | |
console.log('opam executable found: %s', opam_path); | |
const Fs = require('fs/promises'); | |
await Fs.writeFile('.opam-path', opam_path, 'utf-8'); | |
console.log('stored path to .opam-path'); | |
- name: Use cached OPAM environment | |
# if: steps.opam-cache.outputs.cache-hit == 'true' | |
shell: bash | |
run: | | |
# https://github.com/ocaml/setup-ocaml/blob/b2105f9/packages/setup-ocaml/src/installer.ts#L33 | |
echo "OPAMVERBOSE=$RUNNER_DEBUG" >> "$GITHUB_ENV" | |
echo "OPAMCOLOR=always" >> "$GITHUB_ENV" | |
echo "OPAMCONFIRMLEVEL=unsafe-yes" >> "$GITHUB_ENV" | |
echo "OPAMERRLOGLEN=0" >> "$GITHUB_ENV" | |
echo "OPAMPRECISETRACKING=1" >> "$GITHUB_ENV" | |
echo "OPAMYES=1" >> "$GITHUB_ENV" | |
echo "OPAMROOT=$HOME/.opam" >> "$GITHUB_ENV" | |
OPAM_PATH="$(cat .opam-path)" | |
chmod +x "$OPAM_PATH" | |
dirname "$OPAM_PATH" >> "$GITHUB_PATH" | |
- name: Install dependencies | |
run: make install | |
- name: Build | |
run: make build | |
- name: Test | |
run: make test | |
- name: Release static | |
run: make release-static | |
- name: Upload artifacts for ${{ matrix.os }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.os }} | |
path: _build/default/packages/bin/bin.exe | |
- name: Upload runtime artifacts for @davesnx/styled-ppx/runtime | |
if: matrix.os == 'ubuntu-20.04' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: runtime-rescript | |
path: _build/default/packages/runtime/rescript | |
- name: Save opam cache | |
uses: actions/cache/save@v4 | |
if: steps.opam-cache.outputs.cache-hit != 'true' | |
with: | |
path: | | |
${{ runner.tool_cache }}/opam | |
~/.opam | |
_opam | |
.opam-path | |
key: opam-${{ matrix.os }}-${{ matrix.ocaml-compiler }}-${{ hashFiles('**.opam') }} | |
- name: Save npm cache | |
uses: actions/cache/save@v4 | |
with: | |
path: node_modules | |
key: npm-${{ matrix.os }}-${{ hashFiles('package.json') }} | |
- name: Grant permission to run ppx | |
run: chmod +x _build/default/packages/bin/bin.exe | |
- name: Run E2E tests | |
run: make test-e2e | |
publish: | |
name: Publish | |
needs: build | |
if: github.repository_owner == 'davesnx' | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js | |
uses: actions/setup-node@v4 | |
- name: Make NPM release skeleton | |
run: node scripts/release-make-skeleton.js | |
- name: Print short SHA | |
id: sha | |
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Download linux artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: ubuntu-20.04 | |
path: _release/platform-linux-x64 | |
- name: Download macOS artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: macos-latest | |
path: _release/platform-darwin-x64 | |
# - name: Download windows artifacts | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: windows-latest | |
# path: _release/platform-windows-x64 | |
- name: Download runtime-rescript artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: runtime-rescript | |
path: _release/rescript | |
- name: Release nightly (@davesnx/styled-ppx) package | |
if: ${{ success() && github.event_name == 'pull_request' && github.event.pull_request.user.login == 'davesnx' }} | |
id: nightly | |
working-directory: ./_release | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} | |
run: | | |
ls -lhsa | |
npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN | |
npm config set scope "@davesnx" | |
npm version prerelease --preid ${{ steps.sha.outputs.sha_short }} -no-git-tag-version | |
npm publish --access public --tag nightly | |
echo "version=$(npm view @davesnx/styled-ppx@nightly version)" >> $GITHUB_OUTPUT | |
- name: Release (@davesnx/styled-ppx) package | |
if: ${{ success() && github.event_name != 'pull_request' }} | |
working-directory: ./_release | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} | |
run: | | |
npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN | |
npm config set scope "@davesnx" | |
REMOTE=$(npm view @davesnx/styled-ppx version) | |
CURRENT=$(jq -r '.version' package.json) | |
if [ "$REMOTE" != "$CURRENT" ] | |
then | |
npm publish --access public | |
else | |
echo "New verison and remote version are equal, nothing to publish" | |
fi | |
- uses: mshick/add-pr-comment@v2 | |
if: ${{ steps.nightly.outputs.version }} | |
with: | |
message: | | |
New **nightly** version has been published to the NPM registry: [@davesnx/styled-ppx@${{ steps.nightly.outputs.version }}](https://www.npmjs.com/package/@davesnx/styled-ppx/v/${{ steps.nightly.outputs.version }}). | |
Install it with `npm install @davesnx/styled-ppx@nightly` or `npm install @davesnx/styled-ppx@${{ steps.nightly.outputs.version }}`. | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
allow-repeats: false |