chore: Prepare odiff for the image io redistribution (#110) #707
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: Build | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*.*.*" | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
continue-on-error: true | |
strategy: | |
matrix: | |
include: | |
- os: ubuntu-latest | |
artifact: "linux-x64" | |
ocaml-compiler: "ocaml-variants.5.2.0+options,ocaml-option-flambda" | |
triplet: "x64-linux" | |
- os: windows-latest | |
artifact: "windows-x64" | |
ocaml-compiler: "ocaml-variants.5.2.0+options,ocaml-option-flambda" | |
triplet: "x64-mingw-static" | |
- os: macos-latest | |
artifact: "macos-arm64" | |
ocaml-compiler: "ocaml-variants.5.2.0+options,ocaml-option-flambda" | |
triplet: "arm64-osx" | |
- os: macos-13 | |
artifact: "macos-x64" | |
ocaml-compiler: "ocaml-variants.5.2.0+options,ocaml-option-flambda" | |
triplet: "x64-osx" | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/[email protected] | |
- if: runner.os == 'Windows' | |
run: | | |
rm -rf $(which pkg-config) | |
choco install pkgconfiglite | |
- run: gcc --version | |
- uses: lukka/get-cmake@latest | |
- name: Setup anew (or from cache) vcpkg (and does not build any package) | |
uses: lukka/run-vcpkg@v11 | |
env: | |
VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }} | |
VCPKG_DEFAULT_HOST_TRIPLET: ${{ matrix.triplet }} | |
VCPKG_BUILD_TYPE: release | |
with: | |
runVcpkgInstall: true | |
runVcpkgFormatString: '["install", "--clean-after-build"]' | |
- name: Set pkg-config path on Unix | |
if: runner.os != 'Windows' | |
run: | | |
ls "${GITHUB_WORKSPACE}/vcpkg_installed/${VCPKG_DEFAULT_TRIPLET}/lib/pkgconfig" | |
echo "PKG_CONFIG_PATH=${GITHUB_WORKSPACE}/vcpkg_installed/${VCPKG_DEFAULT_TRIPLET}/lib/pkgconfig" >> $GITHUB_ENV | |
- name: Set pkg-config path on Unix | |
shell: bash | |
if: runner.os == 'Windows' | |
run: | | |
echo "PKG_CONFIG_PATH=${GITHUB_WORKSPACE}\vcpkg_installed\\${VCPKG_DEFAULT_TRIPLET}\lib\pkgconfig" >> $GITHUB_ENV | |
- shell: bash | |
run: | | |
echo "LIBPNG_CFLAGS=$(pkg-config --cflags libspng_static)" >> $GITHUB_ENV | |
echo "LIBPNG_LIBS=$(pkg-config --libs libspng_static)" >> $GITHUB_ENV | |
echo "LIBTIFF_LIBS=$(pkg-config --libs libtiff-4)" >> $GITHUB_ENV | |
echo "LIBTIFF_CFLAGS=$(pkg-config --cflags libtiff-4)" >> $GITHUB_ENV | |
echo "LIBJPEG_CFLAGS=$(pkg-config --cflags libturbojpeg)" >> $GITHUB_ENV | |
echo "LIBJPEG_LIBS=$(pkg-config --libs libturbojpeg)" >> $GITHUB_ENV | |
- uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: ${{ matrix.ocaml-compiler }} | |
opam-disable-sandboxing: true | |
dune-cache: false | |
- run: opam exec -- opam install . --deps-only --with-test | |
- run: opam exec -- dune build --verbose | |
- run: opam exec -- dune exec ODiffBin -- --version | |
- run: opam exec -- dune runtest | |
- if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test_images | |
path: _build/default/test/test_images | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
cache: 'npm' | |
cache-dependency-path: 'package-lock.json' | |
- name: Install node deps | |
run: npm ci | |
- name: e2e test | |
run: npm test | |
- name: Build release binary | |
# this is needed because now ocaml's internal cygwin will be used on windows | |
# which breaks normal line endings | |
env: | |
SHELLOPTS: igncr | |
run: | | |
opam exec -- dune clean && \ | |
opam exec -- dune build --release && \ | |
cp "_build/default/bin/ODiffBin.exe" "odiff-${{ matrix.artifact }}.exe" | |
- if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: odiff-${{ matrix.artifact }}.exe | |
path: odiff-${{ matrix.artifact }}.exe | |
retention-days: 14 | |
publish: | |
name: Publish release | |
needs: [build] | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v1 | |
- name: Download built binaries | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: odiff-*.exe | |
merge-multiple: true | |
path: npm_package/raw_binaries | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
cache: 'npm' | |
always-auth: true | |
registry-url: 'https://registry.npmjs.org' | |
cache-dependency-path: 'package-lock.json' | |
- name: Publish npm package | |
working-directory: npm_package | |
run: npm publish | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Create github release | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: "npm_package/raw_binaries/*" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |