mirror of
https://github.com/denoland/rusty_v8.git
synced 2024-12-25 00:29:14 -05:00
f77ab69834
Fails regularly and inexplicably even though installing and starting sscache works just fine: /home/runner/work/_temp/c2b88417-fdca-4378-b8c3-66cea7ddc094.sh: line 1: sccache: command not found It's probably a path issue but as there doesn't seem to be much point in stopping it explicitly, I'm opting to simply remove that CI build step altogether.
233 lines
8.9 KiB
YAML
233 lines
8.9 KiB
YAML
name: ci
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build:
|
|
name: ${{ matrix.config.variant }} ${{ matrix.config.target }}
|
|
if: |
|
|
github.event_name == 'push' ||
|
|
!startsWith(github.event.pull_request.head.label, 'denoland:')
|
|
runs-on: ${{ matrix.config.os }}
|
|
timeout-minutes: 120
|
|
strategy:
|
|
# Always run main branch builds to completion. This allows the cache to
|
|
# stay mostly up-to-date in situations where a single job fails due to
|
|
# e.g. a flaky test.
|
|
# Don't fast-fail on tag build because publishing binaries shouldn't be
|
|
# prevented if 'cargo publish' fails (which can be a false negative).
|
|
fail-fast:
|
|
${{ github.event_name == 'pull_request' || (github.ref !=
|
|
'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) }}
|
|
matrix:
|
|
config:
|
|
- os: macOS-latest
|
|
target: x86_64-apple-darwin
|
|
variant: debug
|
|
cargo: cargo
|
|
|
|
- os: macOS-latest
|
|
target: x86_64-apple-darwin
|
|
variant: release
|
|
cargo: cargo
|
|
|
|
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-20.04-xl' || 'ubuntu-18.04' }}
|
|
target: x86_64-unknown-linux-gnu
|
|
variant: debug
|
|
cargo: cargo
|
|
|
|
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-20.04-xl' || 'ubuntu-18.04' }}
|
|
target: x86_64-unknown-linux-gnu
|
|
variant: release
|
|
cargo: cargo
|
|
|
|
- os: windows-2019
|
|
target: x86_64-pc-windows-msvc
|
|
variant: release # Note: we do not support windows debug builds.
|
|
cargo: cargo
|
|
|
|
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-20.04-xl' || 'ubuntu-18.04' }}
|
|
target: aarch64-unknown-linux-gnu
|
|
variant: debug
|
|
cargo: cargo
|
|
|
|
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-20.04-xl' || 'ubuntu-18.04' }}
|
|
target: aarch64-unknown-linux-gnu
|
|
variant: release
|
|
cargo: cargo
|
|
|
|
- os: ${{ github.repository == 'denoland/rusty_v8' && 'ubuntu-20.04-xl' || 'ubuntu-18.04' }}
|
|
target: aarch64-linux-android
|
|
variant: release # Note: v8 debug builds on QEMU is buggy.
|
|
cargo: cross
|
|
|
|
env:
|
|
V8_FROM_SOURCE: true
|
|
CARGO_VARIANT_FLAG: ${{ matrix.config.variant == 'release' && '--release' || '' }}
|
|
LIB_NAME: ${{ contains(matrix.config.target, 'windows') && 'rusty_v8' || 'librusty_v8' }}
|
|
LIB_EXT: ${{ contains(matrix.config.target, 'windows') && 'lib' || 'a' }}
|
|
RUSTFLAGS: -D warnings
|
|
|
|
steps:
|
|
- name: Configure git
|
|
run: git config --global core.symlinks true
|
|
|
|
- name: Clone repository
|
|
uses: actions/checkout@v1
|
|
with:
|
|
fetch-depth: 10
|
|
submodules: recursive
|
|
|
|
- name: Install rust
|
|
uses: hecrj/setup-rust-action@v1
|
|
with:
|
|
components: clippy, rustfmt
|
|
rust-version: 1.57.0
|
|
|
|
- name: Install python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 2.7.x
|
|
architecture: x64
|
|
|
|
- name: Install cross compilation toolchain
|
|
if: matrix.config.target == 'aarch64-unknown-linux-gnu'
|
|
run: |
|
|
rustup target add aarch64-unknown-linux-gnu
|
|
|
|
sudo apt update
|
|
sudo apt install -yq --no-install-suggests --no-install-recommends \
|
|
binfmt-support g++-10-aarch64-linux-gnu g++-10-multilib \
|
|
gcc-10-aarch64-linux-gnu libc6-arm64-cross qemu qemu-user \
|
|
qemu-user-binfmt
|
|
|
|
sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 \
|
|
/lib/ld-linux-aarch64.so.1
|
|
|
|
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/aarch64-linux-gnu-gcc-10" >> ${GITHUB_ENV}
|
|
echo "QEMU_LD_PREFIX=/usr/aarch64-linux-gnu" >> ${GITHUB_ENV}
|
|
|
|
- name: Write git_submodule_status.txt
|
|
run: git submodule status --recursive > git_submodule_status.txt
|
|
|
|
- name: Cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
# Note: rusty_v8 targets always get get rebuilt, and their outputs
|
|
# ('librusty_v8.rlib', the whole 'gn_out' directory, etc.) can be
|
|
# quite big, so we cache only those subdirectories of
|
|
# target/{debug|release} that contain the build output for crates that
|
|
# come from the registry. By additionally saving the sccache cache
|
|
# directory it's still possible to build v8 fast.
|
|
path: |-
|
|
target/sccache
|
|
target/*/.*
|
|
target/*/build
|
|
target/*/deps
|
|
key:
|
|
cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-${{ hashFiles('Cargo.lock', 'build.rs', 'git_submodule_status.txt') }}
|
|
restore-keys:
|
|
cargo-${{ matrix.config.target }}-${{ matrix.config.variant }}-
|
|
|
|
# It seems that the 'target' directory does not always get restored
|
|
# from cache correctly on MacOS. In the build log we see the following:
|
|
#
|
|
# Fresh serde_derive v1.0.115
|
|
#
|
|
# But a little while after that Cargo aborts because 'serde_derive' is
|
|
# now nowhere to be found. We're not the only ones experiencing this,
|
|
# see https://github.com/actions-rs/cargo/issues/111.
|
|
#
|
|
# error[E0463]: can't find crate for `serde_derive`
|
|
# ##[error] --> /Users/runner/.cargo/registry/src/github.com-
|
|
# | 1ecc6299db9ec823/serde-1.0.115/src/lib.rs:285:1
|
|
# |
|
|
# 285 | extern crate serde_derive;
|
|
# | ^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
|
|
- name: Work around MacOS + Cargo + Github Actions cache bug
|
|
if: runner.os == 'macOS'
|
|
run: cargo clean -p serde_derive
|
|
|
|
- name: Install and start sccache
|
|
shell: pwsh
|
|
env:
|
|
SCCACHE_DIR: ${{ github.workspace }}/target/sccache
|
|
SCCACHE_CACHE_SIZE: 128M
|
|
SCCACHE_IDLE_TIMEOUT: 0
|
|
run: |
|
|
$version = "0.2.12"
|
|
$platform =
|
|
@{ "macOS" = "x86_64-apple-darwin"
|
|
"Linux" = "x86_64-unknown-linux-musl"
|
|
"Windows" = "x86_64-pc-windows-msvc"
|
|
}.${{ runner.os }}
|
|
$basename = "sccache-$version-$platform"
|
|
$url = "https://github.com/mozilla/sccache/releases/download/" +
|
|
"$version/$basename.tar.gz"
|
|
cd ~
|
|
curl -LO $url
|
|
tar -xzvf "$basename.tar.gz"
|
|
. $basename/sccache --start-server
|
|
echo "$(pwd)/$basename" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
|
|
- name: Install cross
|
|
if: matrix.config.target == 'aarch64-linux-android'
|
|
run: cargo install cross
|
|
|
|
- name: Build cross docker image
|
|
if: matrix.config.target == 'aarch64-linux-android'
|
|
run: docker build -t cross:aarch64-linux-android-0.2.1 .
|
|
|
|
- name: Test
|
|
env:
|
|
SCCACHE_IDLE_TIMEOUT: 0
|
|
run:
|
|
${{ matrix.config.cargo }} test -vv --all-targets --locked ${{ env.CARGO_VARIANT_FLAG }}
|
|
--target ${{ matrix.config.target }}
|
|
|
|
- name: Clippy
|
|
run:
|
|
${{ matrix.config.cargo }} clippy --all-targets --locked ${{ env.CARGO_VARIANT_FLAG }}
|
|
--target ${{ matrix.config.target }} -- -D clippy::all
|
|
|
|
- name: Rustfmt
|
|
run: cargo fmt -- --check
|
|
|
|
- name: Prepare binary publish
|
|
run: cp
|
|
target/${{ matrix.config.target }}/${{ matrix.config.variant }}/gn_out/obj/${{ env.LIB_NAME }}.${{ env.LIB_EXT }}
|
|
target/${{ env.LIB_NAME }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}
|
|
|
|
- name: Binary publish
|
|
# TODO(ry): use version instead of commit hash once #139 is fixed.
|
|
# https://github.com/softprops/action-gh-release/issues/139
|
|
uses: softprops/action-gh-release@59c3b4891632ff9a897f99a91d7bc557467a3a22
|
|
if: >-
|
|
github.repository == 'denoland/rusty_v8' &&
|
|
startsWith(github.ref, 'refs/tags/')
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
files: target/${{ env.LIB_NAME }}_${{ matrix.config.variant }}_${{ matrix.config.target }}.${{ env.LIB_EXT }}
|
|
|
|
# TODO: add clang-format and maybe cpplint.
|
|
|
|
- name: Cargo Package
|
|
if: >-
|
|
github.repository == 'denoland/rusty_v8' &&
|
|
startsWith(matrix.config.target , 'x86_64') &&
|
|
matrix.config.variant == 'debug' &&
|
|
runner.os == 'Linux'
|
|
run: cargo package -vv --locked
|
|
|
|
- name: Publish
|
|
# Only publish on x64 linux when there's a git tag:
|
|
if: >-
|
|
startsWith(github.ref, 'refs/tags/') &&
|
|
github.repository == 'denoland/rusty_v8' &&
|
|
startsWith(matrix.config.target , 'x86_64') &&
|
|
matrix.config.variant == 'debug' &&
|
|
runner.os == 'Linux'
|
|
env:
|
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
|
run: cargo publish -vv
|