diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..c2b84ee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,121 @@ +# Based on the "trust" template v0.1.2 +# https://github.com/japaric/trust/tree/v0.1.2 + +dist: trusty +language: rust +services: docker +# sudo: required + +env: + global: + - CRATE_NAME=wasmboy + - PKG_CONFIG_ALLOW_CROSS=1 + +matrix: + include: + # Android + # - env: TARGET=aarch64-linux-android DISABLE_TESTS=1 + # - env: TARGET=arm-linux-androideabi DISABLE_TESTS=1 + # - env: TARGET=armv7-linux-androideabi DISABLE_TESTS=1 + # - env: TARGET=i686-linux-android DISABLE_TESTS=1 + # - env: TARGET=x86_64-linux-android DISABLE_TESTS=1 + + # iOS + # - env: TARGET=aarch64-apple-ios DISABLE_TESTS=1 + # os: osx + # - env: TARGET=armv7-apple-ios DISABLE_TESTS=1 + # os: osx + # - env: TARGET=armv7s-apple-ios DISABLE_TESTS=1 + # os: osx + # - env: TARGET=i386-apple-ios DISABLE_TESTS=1 + # os: osx + # - env: TARGET=x86_64-apple-ios DISABLE_TESTS=1 + # os: osx + + # Linux + # - env: TARGET=aarch64-unknown-linux-gnu + # - env: TARGET=arm-unknown-linux-gnueabi + # - env: TARGET=armv7-unknown-linux-gnueabihf + # - env: TARGET=i686-unknown-linux-gnu + # - env: TARGET=i686-unknown-linux-musl + # - env: TARGET=mips-unknown-linux-gnu + # - env: TARGET=mips64-unknown-linux-gnuabi64 + # - env: TARGET=mips64el-unknown-linux-gnuabi64 + # - env: TARGET=mipsel-unknown-linux-gnu + # - env: TARGET=powerpc-unknown-linux-gnu + # - env: TARGET=powerpc64-unknown-linux-gnu + # - env: TARGET=powerpc64le-unknown-linux-gnu + # - env: TARGET=s390x-unknown-linux-gnu DISABLE_TESTS=1 + - env: TARGET=x86_64-unknown-linux-gnu + # - env: TARGET=x86_64-unknown-linux-musl + + # OSX + - env: TARGET=i686-apple-darwin + os: osx + - env: TARGET=x86_64-apple-darwin + os: osx + + # *BSD + # - env: TARGET=i686-unknown-freebsd DISABLE_TESTS=1 + # - env: TARGET=x86_64-unknown-freebsd DISABLE_TESTS=1 + # - env: TARGET=x86_64-unknown-netbsd DISABLE_TESTS=1 + + # Windows + # - env: TARGET=x86_64-pc-windows-gnu + + # Bare metal + # These targets don't support std and as such are likely not suitable for + # most crates. + # - env: TARGET=thumbv6m-none-eabi + # - env: TARGET=thumbv7em-none-eabi + # - env: TARGET=thumbv7em-none-eabihf + # - env: TARGET=thumbv7m-none-eabi + + # Testing other channels + - env: TARGET=x86_64-unknown-linux-gnu + rust: nightly + - env: TARGET=x86_64-apple-darwin + os: osx + rust: nightly + +before_install: + - set -e + - rustup self update + +install: + - sh ci/install.sh + - source ~/.cargo/env || true + +script: + - bash ci/script.sh + +after_script: set +e + +before_deploy: + - sh ci/before_deploy.sh + +deploy: + api_key: + secure: "V/y7vAIMq0dJS/rP8ORQk9Y2kNjpfc4oYAiED9Bi2ZWwjWTHmcP8ozeqD/GFVByKdgJWoFCRkErZDQQ/4olyodfSPl172jlVVkoeLSzvEm7qCx1PaGOnbjXUqXmq3o2WQndnKNx9ywthhAwgqZEuz5y3k7woSTfimfmzDW/ISMAoHXqP0zRtM+3R+2LUweG3sgWP43F/YMb4i8z1WSSIdRjS646qkL4VLOIXtesli+tpIQWgcFppeGCOdFcBv9iCc3DxCUs4IREHdhEl3bij9FhsFb8rkdX8KAIQ52dL1Wyojm0oCt5zEP7UrfjXYa+Ybxq5pnE++NY9i13c9H2gD1OwhVeU5Ayx0NZTRxRUtl9hHhDxAQFKn9BIMMJ53f7rY1iOvTVGIkBPo9ohr/y654TiioO5ba/OqS9VjR3Pa0o/mDVzIXZWspBpDr8U7wpqO+j+ruRvkSKgw1ClYalXYJ2qoGVz8LeSjjUgIomnGGIiCnpyQp2M+wkPyyFS/ZLqD4EiLnzWNUeaGHYgsjhG66fB2+tNxwhz3TaiGEaUSVJ16PC4ZNZURD3uSSQRC5jBHHiJ9yWSll8Yz1tfS4++csqs1AVCsUBVrZeZATswaEBs/86iHYFNAethwik03UoeaKX39ZrweSJ2xRJQoNbVhhD3Nak1rLqEQZ2PjqOR+Cs=" + file_glob: true + file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.* + on: + condition: $TRAVIS_RUST_VERSION = stable + tags: true + provider: releases + skip_cleanup: true + +cache: cargo +before_cache: + # Travis can't cache files that are not readable by "others" + - chmod -R a+r $HOME/.cargo + +# branches: +# only: +# # release tags +# - /^v\d+\.\d+\.\d+.*$/ +# - master + +notifications: + email: + on_success: never diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..a0243ad --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,74 @@ +# Based on the "trust" template v0.1.2 +# https://github.com/japaric/trust/tree/v0.1.2 + +environment: + global: + RUST_VERSION: stable + CRATE_NAME: wasmboy + + matrix: + # MinGW + - TARGET: i686-pc-windows-gnu + - TARGET: x86_64-pc-windows-gnu + + # MSVC + - TARGET: i686-pc-windows-msvc + - TARGET: x86_64-pc-windows-msvc + + # Testing other channels + - TARGET: x86_64-pc-windows-gnu + RUST_VERSION: nightly + - TARGET: x86_64-pc-windows-msvc + RUST_VERSION: nightly + +install: + - ps: >- + If ($Env:TARGET -eq 'x86_64-pc-windows-gnu') { + $Env:PATH += ';C:\msys64\mingw64\bin' + } ElseIf ($Env:TARGET -eq 'i686-pc-windows-gnu') { + $Env:PATH += ';C:\msys64\mingw32\bin' + } + - curl -sSf -o rustup-init.exe https://win.rustup.rs/ + - rustup-init.exe -y --default-host %TARGET% --default-toolchain %RUST_VERSION% + - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin + - rustc -Vv + - cargo -V +test_script: + # we don't run the "test phase" when doing deploys + - if [%APPVEYOR_REPO_TAG%]==[false] ( + cargo build --target %TARGET% && + cargo build --target %TARGET% --release && + cargo test --target %TARGET% && + cargo test --target %TARGET% --release + ) + +before_deploy: + - cargo build --target %TARGET% --release + - ps: ci\before_deploy.ps1 + +deploy: + artifact: /.*\.zip/ + auth_token: + secure: hbTS9zUFRvPN0bfpuBN04tDGCm79OcCY62k4vNq8GIzlOc99NDO0dWbdrDXYn3Nj + description: '' + on: + RUST_VERSION: stable + appveyor_repo_tag: true + provider: GitHub + +cache: + - C:\Users\appveyor\.cargo\registry + - target + +# branches: +# only: +# # Release tags +# - /^v\d+\.\d+\.\d+.*$/ +# - master + +notifications: + - provider: Email + on_build_success: false + +# Building is done in the test phase, so we disable Appveyor's build phase. +build: false diff --git a/ci/before_deploy.ps1 b/ci/before_deploy.ps1 new file mode 100644 index 0000000..0c8d591 --- /dev/null +++ b/ci/before_deploy.ps1 @@ -0,0 +1,22 @@ +# This script takes care of packaging the build artifacts that will go in the +# release zipfile + +$SRC_DIR = $PWD.Path +$STAGE = [System.Guid]::NewGuid().ToString() + +Set-Location $ENV:Temp +New-Item -Type Directory -Name $STAGE +Set-Location $STAGE + +$ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip" + +Copy-Item "$SRC_DIR\target\$($Env:TARGET)\release\wasmboy.exe" '.\' + +7z a "$ZIP" * + +Push-AppveyorArtifact "$ZIP" + +Remove-Item *.* -Force +Set-Location .. +Remove-Item $STAGE +Set-Location $SRC_DIR diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh new file mode 100644 index 0000000..f5da9bd --- /dev/null +++ b/ci/before_deploy.sh @@ -0,0 +1,31 @@ +# This script takes care of building your crate and packaging it for release + +set -ex + +main() { + local src=$(pwd) \ + stage= + + case $TRAVIS_OS_NAME in + linux) + stage=$(mktemp -d) + ;; + osx) + stage=$(mktemp -d -t tmp) + ;; + esac + + test -f Cargo.lock || cargo generate-lockfile + + cross build --target $TARGET --release + + cp target/$TARGET/release/wasmboy $stage/ + + cd $stage + tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * + cd $src + + rm -rf $stage +} + +main diff --git a/ci/install.sh b/ci/install.sh new file mode 100644 index 0000000..553abd0 --- /dev/null +++ b/ci/install.sh @@ -0,0 +1,56 @@ +set -ex + +main() { + cat > Cross.toml <