From b98299dae2a8a235cc3986c44f7b780430cb8bd7 Mon Sep 17 00:00:00 2001 From: Jori Lampi Date: Mon, 22 Nov 2021 14:22:59 +0200 Subject: [PATCH] Copy workflow setup from 74dcb3e --- .github/workflows/clippy.yml | 18 --- .github/workflows/doc.yml | 9 +- .github/workflows/fmt.yml | 14 --- .github/workflows/test.yml | 96 +++++++++------- .github/workflows/upload-binaries.yml | 158 ++++++++++++++++++-------- 5 files changed, 177 insertions(+), 118 deletions(-) delete mode 100644 .github/workflows/clippy.yml delete mode 100644 .github/workflows/fmt.yml diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml deleted file mode 100644 index 776203de7d7..00000000000 --- a/.github/workflows/clippy.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Clippy check - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - clippy_check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - run: rustup component add clippy - - uses: actions-rs/clippy-check@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 439765cdb05..de7edefe3c1 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -11,10 +11,15 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 with: - persist-credentials: false + profile: minimal + toolchain: stable + - name: Cache + uses: Swatinem/rust-cache@v1 - - name: Install and build + - name: Build docs run: cargo doc - name: Copy index to target/doc diff --git a/.github/workflows/fmt.yml b/.github/workflows/fmt.yml deleted file mode 100644 index ec1965fd5ac..00000000000 --- a/.github/workflows/fmt.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Cargo fmt check - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - cargo_fmt_check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: cargo fmt -- --check diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 95fbe702b37..20591b623d8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,60 +2,78 @@ name: Run tests on: push: - branches: [master] + branches: [main, "[0-9]+.[0-9]+"] pull_request: - branches: [master] + branches: [main, "[0-9]+.[0-9]+"] env: RUST_LOG: debug,j4rs=warn + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0" jobs: - linux: - runs-on: ubuntu-latest + test: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: - - uses: actions/checkout@v2 - - name: Install depedencies + - name: Checkout + uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + components: rustfmt, clippy + - name: Cache + uses: Swatinem/rust-cache@v1 + + - name: Diagnostics on Windows + if: matrix.os == 'windows-latest' + run: "gci env:" + + - name: Rustfmt + run: cargo fmt -- --check + - name: Clippy + if: matrix.os == 'ubuntu-latest' + uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features + + - name: Build test binary + run: cargo test --no-run + + - name: Install dependencies + if: matrix.os == 'ubuntu-latest' run: | sudo apt update -y sudo apt install -y check valgrind # required for make plugin sudo apt install -y libcurl4-gnutls-dev libgit2-dev # required for R - - uses: r-lib/actions/setup-r@v1 - with: - r-version: "3.5.3" - - uses: actions/setup-dotnet@v1 + + - name: Install Node + uses: actions/setup-node@v2 with: - dotnet-version: "5.0.x" - - name: Install tmc-r-tester - run: | - Rscript -e 'install.packages(c("devtools","testthat", "httr", "curl"),repos="https://ftp.eenet.ee/pub/cran/")' - Rscript -e 'devtools::install_github("RTMC/tmc-r-tester/tmcRtestrunner")' - - name: Build test binary - run: cargo test --no-run --verbose - - name: Run tests - run: cargo test --verbose --no-fail-fast + node-version: "16" - windows: - runs-on: windows-latest - steps: # TODO: install missing dependencies and run all tests on windows - - uses: actions/checkout@v2 - - uses: actions/setup-dotnet@v1 + - name: Install C# + uses: actions/setup-dotnet@v1 with: dotnet-version: "5.0.x" - - name: Diagnostics - run: "gci env:" - - name: Build test binary - run: cargo test --no-run --verbose - - name: Run tests - run: cargo test --verbose --no-fail-fast - macos: - runs-on: macos-latest - steps: # TODO: install missing dependencies and run all tests on macos - - uses: actions/checkout@v2 - - uses: actions/setup-dotnet@v1 + - name: Install R + if: matrix.os == 'ubuntu-latest' + uses: r-lib/actions/setup-r@v1 with: - dotnet-version: "5.0.x" - - name: Build test binary - run: cargo test --no-run --verbose + r-version: "3.5.3" + - name: Install tmc-r-tester + if: matrix.os == 'ubuntu-latest' + run: | + Rscript -e 'install.packages(c("testthat", "jsonlite", "R.utils"))' + Rscript -e 'install.packages("plugins/r/tests/tmcRtestrunner", repos=NULL, type="source")' + - name: Run tests - run: cargo test --verbose --no-fail-fast + run: cargo test --no-fail-fast diff --git a/.github/workflows/upload-binaries.yml b/.github/workflows/upload-binaries.yml index 33da4c0cf1f..c038cddb6cf 100644 --- a/.github/workflows/upload-binaries.yml +++ b/.github/workflows/upload-binaries.yml @@ -3,33 +3,66 @@ name: Upload CLI binaries on: release: types: - - created + - released env: TAG: ${{ github.event.release.tag_name }} # had some issue using this directly on windows jobs: linux: - runs-on: ubuntu-16.04 + runs-on: ubuntu-18.04 strategy: matrix: - target: [i686-unknown-linux-gnu, x86_64-unknown-linux-gnu] + target: + [ + x86_64-unknown-linux-gnu, + i686-unknown-linux-gnu, + aarch64-unknown-linux-gnu, + armv7-unknown-linux-gnueabihf, + ] steps: - - uses: actions/checkout@v2 - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + - name: Checkout + uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + - name: Cache + uses: Swatinem/rust-cache@v1 + - name: Node + uses: actions/setup-node@v2 + with: + node-version: "16" + - name: GCloud + uses: google-github-actions/setup-gcloud@master with: project_id: ${{ secrets.GCP_PROJECT_ID }} service_account_key: ${{ secrets.GCP_SA_KEY }} - name: Install dependencies run: | sudo apt update - sudo apt install -y gcc-multilib # required to build for 32-bit arch - - name: Cargo build - run: | - rustup target add i686-unknown-linux-gnu - cargo build -p tmc-langs-cli --release --verbose --target ${{ matrix.target }} + sudo apt install -y gcc-multilib # required to build for 32-bit arch + + - name: Install aarch64-unknown-linux-gnu linker + if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }} + run: sudo apt install -y gcc-aarch64-linux-gnu + - name: Install armv7-unknown-linux-gnueabihf linker + if: ${{ matrix.target == 'armv7-unknown-linux-gnueabihf' }} + run: sudo apt install -y gcc-arm-linux-gnueabihf + - name: Deploy - run: gsutil cp target/${{ matrix.target }}/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-${{ matrix.target }}-$TAG + run: | + rustup target add ${{ matrix.target }} + + # build and deploy CLI + cargo build -p tmc-langs-cli --release --target ${{ matrix.target }} + gsutil cp target/${{ matrix.target }}/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-${{ matrix.target }}-$TAG + + # build and deploy Node module + npm --prefix ./bindings/tmc-langs-node install + npm --prefix ./bindings/tmc-langs-node run build -- --release --target ${{ matrix.target }} + gsutil cp bindings/tmc-langs-node/ts/functions.node gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-${{ matrix.target }}-$TAG.node windows: runs-on: windows-latest @@ -37,67 +70,102 @@ jobs: matrix: target: [i686-pc-windows-msvc, x86_64-pc-windows-msvc] steps: - - uses: actions/checkout@v2 - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + - name: Checkout + uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + - name: Cache + uses: Swatinem/rust-cache@v1 + - name: Node + uses: actions/setup-node@v2 + with: + node-version: "16" + - name: GCloud + uses: google-github-actions/setup-gcloud@master with: project_id: ${{ secrets.GCP_PROJECT_ID }} service_account_key: ${{ secrets.GCP_SA_KEY }} - - name: Cargo build # crt-static is set with RUSTFLAGS to statically link MSVCRT (VCRUNTIME140.dll) + + - name: Build run: | - rustup target add i686-pc-windows-msvc - $env:RUSTFLAGS="-C target-feature=+crt-static" - cargo build -p tmc-langs-cli --release --verbose --target ${{ matrix.target }} + rustup target add ${{ matrix.target }} + $env:RUSTFLAGS="-C target-feature=+crt-static" # crt-static is set with RUSTFLAGS to statically link MSVCRT (VCRUNTIME140.dll) + cargo build -p tmc-langs-cli --release --target ${{ matrix.target }} + cd ./bindings/tmc-langs-node && npm install && npm run build -- --release --target ${{ matrix.target }} - name: Deploy run: | $env:python_version=$(python -c 'import sys; print(\".\".join(map(str, sys.version_info[:3])))') $env:CLOUDSDK_PYTHON="C:\hostedtoolcache\windows\Python\$env:python_version\x64\python" gsutil cp target/${{ matrix.target }}/release/tmc-langs-cli.exe gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-${{ matrix.target }}-$Env:TAG.exe + gsutil cp bindings/tmc-langs-node/ts/functions.node gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-${{ matrix.target }}-$Env:TAG.node macos: - runs-on: macos-latest + runs-on: macos-10.15 steps: - - uses: actions/checkout@v2 - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + - name: Checkout + uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + - name: Cache + uses: Swatinem/rust-cache@v1 + - name: Node + uses: actions/setup-node@v2 + with: + node-version: "16" + - name: GCloud + uses: google-github-actions/setup-gcloud@master with: project_id: ${{ secrets.GCP_PROJECT_ID }} service_account_key: ${{ secrets.GCP_SA_KEY }} + - name: Cargo build - run: cargo build -p tmc-langs-cli --release --verbose + run: | + cargo build -p tmc-langs-cli --release + npm --prefix ./bindings/tmc-langs-node install + npm run --prefix ./bindings/tmc-langs-node build -- --release - name: Sign run: codesign --force -s - target/release/tmc-langs-cli - name: Deploy - run: gsutil cp target/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-x86_64-apple-darwin-$TAG + run: | + gsutil cp target/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-x86_64-apple-darwin-$TAG + gsutil cp bindings/tmc-langs-node/ts/functions.node gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-x86_64-apple-darwin-$TAG.node macos-11: - runs-on: macos-11.0 + runs-on: macos-11 steps: - - uses: actions/checkout@v2 - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + - name: Checkout + uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + - name: Cache + uses: Swatinem/rust-cache@v1 + - name: Node + uses: actions/setup-node@v2 + with: + node-version: "16" + - name: GCloud + uses: google-github-actions/setup-gcloud@master with: project_id: ${{ secrets.GCP_PROJECT_ID }} service_account_key: ${{ secrets.GCP_SA_KEY }} + - name: Cargo build - run: cargo build -p tmc-langs-cli --release --verbose + run: | + cargo build -p tmc-langs-cli --release + npm --prefix ./bindings/tmc-langs-node install + npm run --prefix ./bindings/tmc-langs-node build -- --release - name: Sign run: codesign --force -s - target/release/tmc-langs-cli - name: Deploy - run: gsutil cp target/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-aarch64-apple-darwin-$TAG - - arm: - runs-on: ubuntu-16.04 - strategy: - matrix: - target: [aarch64-unknown-linux-gnu, armv7-unknown-linux-gnueabihf] - steps: - - uses: actions/checkout@v2 - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master - with: - project_id: ${{ secrets.GCP_PROJECT_ID }} - service_account_key: ${{ secrets.GCP_SA_KEY }} - - name: Cargo build run: | - rustup target add ${{ matrix.target }} - cargo install cross - cross build -p tmc-langs-cli --release --verbose --target ${{ matrix.target }} - - name: Deploy - run: gsutil cp target/${{ matrix.target }}/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-${{ matrix.target }}-$TAG + gsutil cp target/release/tmc-langs-cli gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-cli-aarch64-apple-darwin-$TAG + gsutil cp bindings/tmc-langs-node/ts/functions.node gs://${{ secrets.GCP_BUCKET }}/tmc-langs-rust/tmc-langs-aarch64-apple-darwin-$TAG.node