From 6fe9242eecebaf65265656d773ae4a07d3a18a08 Mon Sep 17 00:00:00 2001 From: Paul Berberian Date: Sun, 1 Sep 2024 20:30:46 +0200 Subject: [PATCH] Try adding GitHub actions on PRs --- .github/workflows/checks.yml | 63 +++++++++++++++++ .gitignore | 2 + package.json | 4 ++ scripts/install_binaryen.sh | 133 +++++++++++++++++++++++++++++++++++ 4 files changed, 202 insertions(+) create mode 100644 .github/workflows/checks.yml create mode 100755 scripts/install_binaryen.sh diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 0000000..62fe793 --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,63 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Wasp-HLS PR check + +on: + push: + branches: [stable, dev, legacy-v3] + pull_request: + types: [opened, synchronize, reopened] + +jobs: + format_check: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + + - run: npm install + - run: rustup component add rustfmt + - run: npm run fmt:check + - run: npm run fmt:check + + typechecking_and_linting: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + + - run: npm install + - run: rustup target add wasm32-unknown-unknown + - run: rustup component add clippy + - run: npm run install:binaryen + - run: cargo install wasm-bindgen-cli@0.2.84 + - run: PATH=$PATH:~/tmp/binaryen/bin npm run build:all + - run: npm run check + - run: npm run clippy diff --git a/.gitignore b/.gitignore index 60adb41..8a0b972 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ /wasm.d.ts /worker.js /worker.d.ts + +/tmp diff --git a/package.json b/package.json index c097a7f..5c01fa7 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,11 @@ "doc": "rm -rf doc/generated && docgen.ico doc build/doc", "fmt": "npm run fmtr && npm run fmtt", "fmtr": "cargo fmt", + "fmtr:check": "cargo fmt --check", "fmtt": "prettier --write . --loglevel warn", + "fmtt:check": "prettier . --check", + "fmt:check": "npm run fmtr:check && npm run fmtt:check", + "install:binaryen": "./scripts/install_binaryen.sh", "lint": "npm run lint:main && npm run lint:worker && npm run lint:transmux && npm run lint:common && npm run lint:demo", "lint:common": "cd src/ts-common && eslint .", "lint:demo": "cd demo && eslint src/**/*", diff --git a/scripts/install_binaryen.sh b/scripts/install_binaryen.sh new file mode 100755 index 0000000..68f3df8 --- /dev/null +++ b/scripts/install_binaryen.sh @@ -0,0 +1,133 @@ +#!/bin/sh + +# TODO Documentation + +# Log a line to stdout, prefixing it with the name of this script +log() { + printf 'wasp-hls > install_binaryen: %s\n' "$1" +} + +# Log a line to sterr, prefixing it with the name of this script +err() { + log "ERROR: $1" >&2 + echo "" + echo "Please install a rust toolchain (with the \"wasm32-unknown-unknown\" target) and binaryen manually" >&2 + exit 1 +} + +# Checks that the command in argument exists, exits after printing the issue to +# stderr if that's not the case +requires_cmd() { + if ! command -v "$1" >/dev/null 2>&1; then + err "Need '$1' (command not found)" + fi +} + +# Run a command that should never fail. If the command fails execution +# will immediately terminate with an error showing the failing +# command. +ensure() { + if ! "$@"; then + err "Command failed: $*" + fi +} + +log "This script will install binaryen locally in the following directory: $(pwd)/tmp" + +requires_cmd curl +requires_cmd tar + +ensure mkdir -p tmp +rm -rf tmp/binaryen +rm -rf tmp/binaryen.tar.gz + +ostype="$(uname -s)" +cpuarch="$(uname -m)" + +if [ "$ostype" = Linux ]; then + if [ "$(uname -o)" = Android ]; then + err "Unhandled OS type (Android), please install binaryen manually" + fi +fi + +if [ "$ostype" = Darwin ] && [ "$cpuarch" = i386 ]; then + # Darwin `uname -m` lies + if sysctl hw.optional.x86_64 | grep -q ': 1'; then + cpuarch=x86_64 + fi +fi + +case "$ostype" in +Linux) ;; +Darwin) ;; +MINGW* | MSYS* | CYGWIN* | Windows_NT) + ostype=Windows + ;; +*) + err "Unhandled OS type ($ostype), please install binaryen manually" + ;; +esac + +case "$cpuarch" in +aarch64 | arm64) + cpuarch=aarch64 + ;; +x86_64 | x86-64 | x64 | amd64) + cpuarch=x86_64 + ;; +*) + err "Unhandled CPU type ($cpuarch), please install binaryen manually" + ;; +esac + +# TODO automatically download last binaryen? +# We might need to detect which build is available. Targeting version 116 is +# good enough for now +if [ "${ostype}" = Darwin ]; then + if [ "${cpuarch}" = aarch64 ]; then + log "Architecture detected -> MacOS ARM" + binaryen_url=https://github.com/WebAssembly/binaryen/releases/download/version_116/binaryen-version_116-arm64-macos.tar.gz + else + log "Architecture detected -> MacOS x86_64" + binaryen_url=https://github.com/WebAssembly/binaryen/releases/download/version_116/binaryen-version_116-x86_64-macos.tar.gz + fi +elif [ "${ostype}" = Linux ]; then + if [ "${cpuarch}" != x86_64 ]; then + err "For Linux, only x86_64 is supported by our auto-install script. Please install binaryen manually." + fi + log "Architecture detected -> Linux x86_64" + binaryen_url=https://github.com/WebAssembly/binaryen/releases/download/version_116/binaryen-version_116-x86_64-linux.tar.gz +elif [ "${ostype}" = Windows ]; then + if [ "${cpuarch}" != x86_64 ]; then + err "For Windows, only x86_64 is supported by our auto-install script. Please install binaryen manually." + fi + log "Architecture detected -> Windows x86_64" + binaryen_url=https://github.com/WebAssembly/binaryen/releases/download/version_116/binaryen-version_116-x86_64-windows.tar.gz +fi + +log "Fetching binaryen 116..." +curl -L $binaryen_url >tmp/binaryen.tar.gz +if ! [ $? -eq 0 ]; then + err "Failed to fetch binaryen" +fi + +cd tmp +ensure tar xzf binaryen.tar.gz + +ensure mv binaryen-version_116 binaryen + +# TODO I don't know my windows, does that still work as an executable or is it just dumb? +if [ "${ostype}" = Windows ]; then + ensure cp binaryen/bin/wasm-opt.exe binaryen/bin/wasm-opt +fi + +rm binaryen.tar.gz +cd .. + +if ! [ -f tmp/binaryen/bin/wasm-opt ]; then + err "Error after installing binaryen: wasm-opt not available in ./tmp/binaryen/bin/wasm-opt" +fi + +log "Binaryen has been installed in $pwd/tmp/binaryen" +log "You may now run binaryen-linked scripts by first adding \"$pwd/tmp/binaryen\" to PATH:" +log "PATH=\$PATH:~/tmp/binaryen/bin npm run "