Skip to content

Pin without invariance #329

Pin without invariance

Pin without invariance #329

Workflow file for this run

name: CI
on: [push]
jobs:
build:
name: Built and test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [
ubuntu-latest,
macos-latest,
# windows-latest
]
ocaml-compiler:
- 5.1.0
steps:
- uses: actions/checkout@v2
- name: Use Node.js 16.x
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/setup-node@v1
with:
node-version: 16.x
- name: Restore global node modules cache
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/cache@v1
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Load opam cache when not Windows
if: runner.os != 'Windows'
id: opam-cache
uses: actions/cache/restore@v3
with:
path: ~/.opam
key: opam-${{ matrix.os }}-${{ matrix.ocaml-compiler }}-${{ hashFiles('**.opam') }}
- name: Load opam cache when Windows
if: runner.os == 'Windows'
id: opam-cache-windows
uses: actions/cache/restore@v3
with:
path: _opam
key: opam-${{ matrix.os }}-${{ matrix.ocaml-compiler }}-${{ hashFiles('**.opam') }}
- name: Use OCaml ${{ matrix.ocaml-compiler }}
uses: ocaml/setup-ocaml@d7e9ba90ba3b08308d8379b401c1317dbd443782
with:
ocaml-compiler: ${{ matrix.ocaml-compiler }}
dune-cache: true
opam-disable-sandboxing: true
- name: Install deps
run: opam install . --deps-only --with-doc --with-test
- name: Pin dune and melange
run: make pin
- name: Build
run: make build
- name: Check formatting
run: make format-check
- name: Run tests
run: make test
- name: Web build
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
cd website
npm ci
npm run build-production
- name: Deploy to prod
if: ${{ matrix.os == 'ubuntu-latest' && github.event_name != 'pull_request' }}
working-directory: ./website
env:
SITE_ID: ${{ secrets.SITE_ID }}
AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
run:
npx netlify deploy --site $SITE_ID --auth $AUTH_TOKEN --prod --dir=build
- name: Deploy preview
if: ${{ matrix.os == 'ubuntu-latest' }}
working-directory: ./website
env:
SITE_ID: ${{ secrets.SITE_ID }}
AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
run:
npx netlify deploy --site $SITE_ID --auth $AUTH_TOKEN --dir=build
- name: Upload artifacts for ${{ matrix.os }}
uses: actions/upload-artifact@master
with:
name: ${{ matrix.os }}-artifact
path: _build/default/bin/Bin.exe
- name: Upload JavaScript artifacts for NPM
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/upload-artifact@master
with:
name: bundled
path: _build/default/js/Js.bc.js
publish:
needs: build
name: Publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Generate NPM package and release
run: node scripts/make-npm-release.js
- name: Download JavaScript artifact
if: ${{ success() }}
uses: actions/download-artifact@master
with:
name: bundled
path: _release/bundled
- name: Download linux artifacts
if: ${{ success() }}
uses: actions/download-artifact@master
with:
name: ubuntu-latest-artifact
path: _release/platform-linux-x64
- name: Download macOS artifacts
if: ${{ success() }}
uses: actions/download-artifact@master
with:
name: macos-latest-artifact
path: _release/platform-darwin-x64
- name: Download windows artifacts
uses: actions/download-artifact@master
with:
name: windows-latest-artifact
path: _release/platform-windows-x64
- name: Publish query-json from linux artifcats
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
cp _release/platform-linux-x64/Bin.exe ./query-json
chmod +x query-json
- name: Create archives for Github release
run: |
cd _release/platform-darwin-x64
mv Bin.exe query-json
zip -r ../../query-json-darwin-x64.zip .
cd ../..
cd _release/platform-linux-x64
mv Bin.exe query-json
zip -r ../../query-json-linux-x64.zip .
cd ../..
cd _release/platform-windows-x64
mv Bin.exe query-json
zip -r ../../query-json-windows-x64.zip .
cd ../..
- name: End to end Test (Linux)
if: ${{ matrix.os == 'ubuntu-latest' }}
run: npx bats ./e2e/test.sh
env:
IS_CI: true
- name: End to end Test (Windows)
if: ${{ matrix.os == 'windows-latest' }}
run: sh -c 'npx bats ./e2e/test.sh' \"$(pwd)/node_modules/bats/bin/bats\"
env:
IS_CI: true
- name: Check if should be published
if: ${{ success() && github.event_name != 'pull_request' }}
id: newVersion
run: |
REMOTE=$(npm view @davesnx/query-json version);
CURRENT=$(cat dune-project | grep -oE '\(version [0-9]+\.[0-9]+\.[0-9]+\)' | grep -o '\d\+.\d\+.\d\+');
if [ "$REMOTE" != "$CURRENT" ]
then
echo "::set-output name=shouldPublish::true";
else
echo "::set-output name=shouldPublish::false";
fi
- name: Publish
if: ${{ success() && github.event_name != 'pull_request' && steps.newVersion.outputs.shouldPublish == 'true' }}
run: |
npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
npm config set scope "@davesnx"
npm publish --access public
working-directory: ./_release
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
- name: Print short SHA
id: sha
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Publish Prerelease
if: ${{ github.event_name == 'pull_request' }}
run: |
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 --tag=dev --access public
working-directory: ./_release
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
- name: Create Github release
if: ${{ success() && steps.newVersion.outputs.shouldPublish == 'true' }}
id: create_release
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.sha.outputs.sha_short }}
release_name: Release ${{ steps.sha.outputs.sha_short }}
draft: false
prerelease: true
- name: Upload query-json-darwin-x64.zip to Github release
if: ${{ success() && steps.newVersion.outputs.shouldPublish == 'true' }}
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: query-json-darwin-x64.zip
asset_name: query-json-darwin-x64.zip
asset_content_type: application/gzip
- name: Upload query-json-linux-x64.zip to Github release
if: ${{ success() && steps.newVersion.outputs.shouldPublish == 'true' }}
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: query-json-linux-x64.zip
asset_name: query-json-linux-x64.zip
asset_content_type: application/gzip
- name: Upload query-json-windows-x64.zip to Github release
if: ${{ success() && steps.newVersion.outputs.shouldPublish == 'true' }}
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: query-json-windows-x64.zip
asset_name: query-json-windows-x64.zip
asset_content_type: application/gzip