ruffle/.circleci/config.yml

336 lines
10 KiB
YAML
Raw Normal View History

version: 2.1
description: Ruffle - Flash Player emulator written in Rust
orbs:
win: circleci/windows@1.0.0
jobs:
# General testing, linux + web build
build:
docker:
2019-11-17 21:51:31 +00:00
- image: circleci/rust:1.39
steps:
# Git checkout
- checkout
# Restore cached assets (cargo registry)
- restore_cache:
keys:
2019-11-25 23:34:24 +00:00
- v3-cargo-cache-linux-{{ .Revision }}
- v3-cargo-cache-linux-
# Install dependencies
- run:
name: Setup
command: |
rustup toolchain install stable
rustup run stable rustc --version --verbose
rustup component add --toolchain stable clippy
rustup run stable cargo clippy --version
rustup component add --toolchain stable rustfmt
rustup run stable cargo fmt --version
sudo apt-get update
sudo apt-get -y install libasound2-dev # Required for cpal crate on Linux
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
mkdir workspace
# Run tests
- run:
name: Tests
command: |
rustup run stable cargo test --package=ruffle_core
# Run cargo clippy and fmt
- run:
name: Clippy + Format
command: |
rustup run stable cargo clippy --all --tests -- -D warnings
rustup run stable cargo fmt --all -- --check
# Build the linux binary
- run:
name: Linux Build
command: |
rustup run stable cargo build --package ruffle_desktop --release
mkdir linux
cp target/release/ruffle_desktop linux/ruffle
cp README.md LICENSE_APACHE LICENSE_MIT linux
cd linux
tar -czvf ../workspace/linux.tar.gz *
# Build the web self-hosted binary
- run:
name: Web Build
command: |
cd web/selfhosted
npm install
npm run build -- --mode=production
cd dist
cp ../../../README.md .
cp ../../../LICENSE_APACHE .
cp ../../../LICENSE_MIT .
zip -r web.zip .
cd ../../..
mkdir -p workspace/web
cp web/selfhosted/dist/web.zip workspace/web.zip
# Build the wasm demo binary
- run:
name: Web Demo Build
command: |
cd web/demo
npm install
npm run build -- --mode=production
cd ../..
mkdir -p workspace/web-demo
cp web/demo/dist/* workspace/web-demo
# Build the web extension
- run:
name: Extension Build
command: |
cd web/extension
npm install
2019-11-26 00:39:22 +00:00
npm run build -- --mode=production
cd build
cp ../../../README.md .
cp ../../../LICENSE_APACHE .
cp ../../../LICENSE_MIT .
zip -r extension.zip .
cd ../../..
cp web/extension/build/extension.zip workspace
# Save cached assets
- save_cache:
2019-11-25 23:34:24 +00:00
key: v3-cargo-cache-linux-{{ .Revision }}
paths:
- "/usr/local/cargo/registry"
- "./target"
# Persist build artifacts for deploy job
- persist_to_workspace:
root: workspace
paths:
- linux.tar.gz
- extension.zip
- web.zip
- web-demo
# OSX Build
build_osx:
macos:
xcode: "9.3.0"
steps:
# Git checkout
- checkout
# Restore cached assets (cargo registry)
- restore_cache:
keys:
2019-11-25 23:34:24 +00:00
- v3-cargo-cache-osx-{{ .Revision }}
- v3-cargo-cache-osx-
# Install dependencies
- run:
name: Setup
command: |
# Install rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
# Install stable rust toolchain
rustup toolchain install stable
rustup run stable rustc --version --verbose
rustup run stable cargo --version --verbose
mkdir workspace
# Build the OSX binary
- run:
name: OSX Build
command: |
source $HOME/.cargo/env
rustup run stable cargo build --package ruffle_desktop --release
mkdir osx
cp target/release/ruffle_desktop osx/ruffle
cp README.md LICENSE_APACHE LICENSE_MIT osx
cd osx
tar -czvf ../workspace/osx.tar.gz *
# Save cached assets
- save_cache:
2019-11-25 23:34:24 +00:00
key: v3-cargo-cache-osx-{{ .Revision }}
paths:
- "~/.cargo/registry"
- "./target"
# Persist build artifacts for deploy job
- persist_to_workspace:
root: workspace
paths:
- osx.tar.gz
# Windows build
build_windows:
executor:
name: win/vs2019
shell: powershell.exe
steps:
# Git checkout
- checkout
# Restore cached assets (cargo registry)
- restore_cache:
keys:
2019-11-25 23:34:24 +00:00
- v3-cargo-cache-windows-{{ .Revision }}
- v3-cargo-cache-windows-
# Install dependencies
- run:
name: Install dependencies
command: |
# Install rustup
$client = new-object System.Net.WebClient
$client.DownloadFile('https://win.rustup.rs', "$pwd\rustup-init.exe")
.\rustup-init.exe -y
mkdir workspace
# Build the Windows binary
- run:
name: Windows Build
command: |
# This is necessary because otherwise cargo fails when trying to use git?
mkdir .cargo
Add-Content .cargo\config "[net]`ngit-fetch-with-cli = true"
rustup run stable rustc --version --verbose
rustup run stable cargo --version --verbose
rustup run stable cargo build --package ruffle_desktop --release
mkdir windows
copy target\release\ruffle_desktop.exe windows\ruffle.exe
copy README.md windows
copy LICENSE_APACHE windows
copy LICENSE_MIT windows\
# Have to turn off progress bar or CI explodes?!
$progressPreference = 'silentlyContinue'
Compress-Archive -Path windows\* -CompressionLevel Optimal -DestinationPath workspace\windows.zip
# Save cached assets
- save_cache:
2019-11-25 23:34:24 +00:00
key: v3-cargo-cache-windows-{{ .Revision }}
paths:
- c:\users\circleci\.cargo\registry
- target
# Persist build artifacts for deploy job
- persist_to_workspace:
root: workspace
paths:
- windows.zip
# Upload builds to S3
deploy:
docker:
- image: circleci/python:3.7-stretch
steps:
# Access build artifacts in workspace
- attach_workspace:
at: workspace
# Set environment variables for nightly build name
- run:
name: Environment vars
command: |
echo 'export SHORT_GIT_HASH=$(echo $CIRCLE_SHA1 | cut -c -7)' >> $BASH_ENV
echo 'export BUILD_ID=$(date +"%Y-%m-%d")_${SHORT_GIT_HASH}' >> $BASH_ENV
echo 'export NUM_BUILDS=27' >> $BASH_ENV
# Install AWS CLI
- run:
name: Install awscli
command: sudo pip install awscli
- run:
name: Sync with S3
command: |
mkdir -p builds
aws s3 sync s3://ruffle-rs/builds builds
- run:
name: Check if stale build
command: |
# Check if files exist with this Git commit ID.
# If so, this isn't a new commit, so cancel the deployment.
if ls builds/linux/*${SHORT_GIT_HASH}.tar.gz 1> /dev/null 2>&1; then
echo "No new commits; cancelling deploy"
circleci-agent step halt
fi
- run:
name: Deploy to S3
command: |
rm -f builds/web-demo/*.wasm
rm -f builds/web-demo/*.js
rm -f builds/web-demo/*.html
mkdir -p builds/linux
cp -f workspace/linux.tar.gz builds/linux/ruffle_linux_latest.tar.gz
cp -f workspace/linux.tar.gz builds/linux/ruffle_linux_${BUILD_ID}.tar.gz
mkdir -p builds/osx
cp -f workspace/osx.tar.gz builds/osx/ruffle_osx_latest.tar.gz
cp -f workspace/osx.tar.gz builds/osx/ruffle_osx_${BUILD_ID}.tar.gz
mkdir -p builds/windows
cp -f workspace/windows.zip builds/windows/ruffle_windows_latest.zip
cp -f workspace/windows.zip builds/windows/ruffle_windows_${BUILD_ID}.zip
mkdir -p builds/web
cp -f workspace/web.zip builds/web/ruffle_web_latest.zip
cp -f workspace/web.zip builds/web/ruffle_web_${BUILD_ID}.zip
mkdir -p builds/extension
cp -f workspace/extension.zip builds/extension/ruffle_extension_latest.zip
cp -f workspace/extension.zip builds/extension/ruffle_extension_${BUILD_ID}.zip
# Only keep a certain # of builds.
ls -1t builds/linux/* | tail -n +${NUM_BUILDS} | xargs rm -f
ls -1t builds/osx/* | tail -n +${NUM_BUILDS} | xargs rm -f
ls -1t builds/windows/* | tail -n +${NUM_BUILDS} | xargs rm -f
ls -1t builds/web/* | tail -n +${NUM_BUILDS} | xargs rm -f
ls -1t builds/extension/* | tail -n +${NUM_BUILDS} | xargs rm -f
# Copy over web demo.
cp -rf workspace/web-demo builds
# Upload to S3.
# S3 currently gives .wasm files the wrong MIME type, so have to upload that separately.
aws s3 sync builds s3://ruffle-rs/builds --acl public-read --exclude '*.wasm' --delete
aws s3 sync builds s3://ruffle-rs/builds --acl public-read --exclude '*' --include '*.wasm' --delete --content-type 'application/wasm'
# By default, S3 serves
workflows:
version: 2
# Basic linux build on each push or pull request to the repo
commit_build:
jobs:
2019-11-19 18:33:18 +00:00
- build
# Nightly builds
nightly_build:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- master
jobs:
- build
- build_osx
- build_windows
- deploy:
requires:
- build
- build_osx
- build_windows