Skip to content

Commit

Permalink
prepare for releases
Browse files Browse the repository at this point in the history
  • Loading branch information
Jorge Aparicio committed Oct 15, 2016
1 parent 010f3c4 commit 4b53d39
Show file tree
Hide file tree
Showing 15 changed files with 233 additions and 40 deletions.
48 changes: 45 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,61 @@
cache: cargo
dist: trusty
env: TARGET=x86_64-unknown-linux-gnu
language: rust
rust: nightly-2016-09-30
rust: stable
services: docker
sudo: required

env:
global:
- CRATE_NAME=svd2rust
- TARGET=x86_64-unknown-linux-gnu

matrix:
include:
# OSX
- env: TARGET=i686-apple-darwin
os: osx
- env: TARGET=x86_64-apple-darwin
os: osx

# Linux
- env: TARGET=i686-unknown-linux-gnu
- env: TARGET=i686-unknown-linux-musl
- env: TARGET=x86_64-unknown-linux-musl

install:
# `std for cross-compilation
- curl https://static.rust-lang.org/rustup.sh |
sh -s -- --add-target=$TARGET --disable-sudo -y --prefix=`rustc --print sysroot`

script:
- cargo generate-lockfile
- sh ci/run-docker.sh $TARGET
- if [[ $TRAVIS_OS_NAME = linux ]]; then
sh ci/run-docker.sh $TARGET;
else
sh ci/run.sh;
fi
# Travis can't cache files that are not readable by "others"
- chmod -R a+r $HOME/.cargo

before_deploy:
- sh ci/package.sh $TARGET

deploy:
provider: releases
api_key:
secure: b+q2Uul+hA1OyFbfWaQTF02xwZNTl5x8uumHkx7eeZZYtrXZh8aKyMgUiCVbcdch+p8r0QqvGYXyHUqtCmeFzLrFiudoleQBojs+0Pbrfnw5PH93k4Bf2snOJu6Sp5xjl5X34C+eM/hT3vIrAmEZCXFwVG7piZsdXWBdvkudz6pit8R2hsa6uxbyCs2lXmS/aWHSygg25DtrP/cezILxwS0VtXwgFOUTn8AQMd4bZeEz6ezTcUuCKEHdC9SUmFiNIwR7rjVzL4+Z7ffOz3TF4UHyTa+DLRM4pIO4L/DH+G2KJ3kw2C/98tLGwyObYChwiKXY1lW+bjauD38rwIMpzbAEAx+oPZQNLwdLXjIk9ZN9K3Dm0yWs5aZC+8O7QiOgxMTA3zQmZJdSRpnHLZJKns8hmxOyVeGr+RlTt+sJXqErgN8yzUSdn918kTbAqvc1x0zb/eC+wAx7ULvgjGmO6AuWZWRVM6SrXoKjANUCH1OdkpFA7T0pZ3Nx4p503234hKFyIoS/sd1I17bcBElP59zdv/NlpBAndxRdzPk/V2W40736xxLdQWgRgTMP95+/AJmsf8orscVag/wOdN4ACmwdAi6YxZB+bO9mMzuLJ8Z9BoudGqzaw3uCxkNNQSn+KJ+MrkhBnct7TnDPuAhy4pAOtmwgW3PTPrxsiNQQw+4=
file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.*
# don't delete the target directory
skip_cleanup: true
on:
condition: $TRAVIS_RUST_VERSION = stable
tags: true

branches:
only:
# Release tags
- /^v\d+\.\d+\.\d+.*$/
- auto
- try

Expand Down
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[package]
authors = ["Jorge Aparicio <[email protected]>"]
build = "build.rs"
name = "svd2rust"
version = "0.1.0"

Expand Down
49 changes: 49 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
environment:
global:
CRATE_NAME: svd2rust
RUST_VERSION: nightly
matrix:
- TARGET: i686-pc-windows-gnu
- TARGET: i686-pc-windows-msvc
- TARGET: x86_64-pc-windows-gnu
- TARGET: x86_64-pc-windows-msvc

install:
- ps: ci\install.ps1

build: false

test_script:
- if [%APPVEYOR_REPO_TAG%]==[false] (
cargo build --target %TARGET%
) else (
cargo rustc --target %TARGET% --release --bin svd2rust -- -C lto
)

before_deploy:
- ps: ci\package.ps1

deploy:
description: 'Windows release'
artifact: /.*\.zip/
auth_token:
secure: bQ29dEXeNG5VP2hQcWiZ1xsfmkGosteCDNeYu/cXTX4lOeghOp0qANpQXmGfal29
provider: GitHub
on:
RUST_VERSION: nightly
appveyor_repo_tag: true

cache:
- C:\Users\appveyor\.cargo\registry
- target

branches:
only:
# Release tags
- /^v\d+\.\d+\.\d+.*$/
- auto
- try

notifications:
- provider: Email
on_build_success: false
10 changes: 0 additions & 10 deletions build.rs

This file was deleted.

6 changes: 6 additions & 0 deletions ci/docker/i686-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gcc-multilib
9 changes: 9 additions & 0 deletions ci/docker/i686-unknown-linux-musl/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gcc-multilib \
musl-tools
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc \
CC_i686_unknown_linux_musl=musl-gcc
2 changes: 1 addition & 1 deletion ci/docker/x86_64-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:16.04
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
ca-certificates \
Expand Down
8 changes: 8 additions & 0 deletions ci/docker/x86_64-unknown-linux-musl/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gcc \
libc6-dev \
musl-tools
26 changes: 26 additions & 0 deletions ci/install.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
$Env:HOST = $Env:TARGET

If ($Env:TARGET -Match 'gnu') {
if ($Env:TARGET -Match 'x86_64') {
$Env:PATH += ';C:\msys64\mingw64\bin'
} else {
$Env:PATH += ';C:\msys64\mingw32\bin'
}
} ElseIf ($Env:TARGET -Match 'i586') {
$Env:HOST = 'i686-pc-windows-msvc'
}

[Net.ServicePointManager]::SecurityProtocol = 'Ssl3, Tls, Tls12'
Start-FileDownload 'https://win.rustup.rs' 'rustup-init.exe'

.\rustup-init --default-host $Env:HOST --default-toolchain $Env:RUST_VERSION -y

$Env:PATH = 'C:\Users\appveyor\.cargo\bin;' + $Env:PATH

If ($Env:TARGET -ne $Env:HOST) {
rustup target add $Env:TARGET
}

rustc -Vv

cargo -V
17 changes: 17 additions & 0 deletions ci/package.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
$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\svd2rust.exe" '.\'
7z a "$ZIP" *

Push-AppveyorArtifact "$ZIP"

Remove-Item *.* -Force
Set-Location ..
Remove-Item $STAGE
Set-Location $SRC_DIR
27 changes: 27 additions & 0 deletions ci/package.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
set -ex

run() {
local src_dir=$(pwd)\
stage=$(mk_temp_dir)

cp target/$TARGET/release/svd2rust $stage/

cd $stage
tar czf $src_dir/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz *
cd $src_dir

rm -rf $stage
}

mk_temp_dir() {
case $TRAVIS_OS_NAME in
linux)
mktemp -d
;;
osx)
mktemp -d -t tmp
;;
esac
}

run
16 changes: 8 additions & 8 deletions ci/run-docker.sh
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
set -ex

run() {
local target=$1

echo $target

# This directory needs to exist before calling docker, otherwise docker will create it but it
# will be owned by root
mkdir -p target

docker build -t $target ci/docker/$target
docker build -t $1 ci/docker/$1
docker run \
--rm \
--user $(id -u):$(id -g) \
-e CARGO_HOME=/cargo \
-e CARGO_TARGET_DIR=/target \
-e HOME=/tmp \
-e TARGET=$1 \
-e TRAVIS_OS_NAME=linux \
-e TRAVIS_RUST_VERSION=$TRAVIS_RUST_VERSION \
-e TRAVIS_TAG=$TRAVIS_TAG \
-e USER=$USER \
-v $HOME/.cargo:/cargo \
-v `pwd`/target:/target \
-v `pwd`:/checkout:ro \
-v `rustc --print sysroot`:/rust:ro \
-w /checkout \
-it $target \
sh -c "PATH=\$PATH:/rust/bin ci/run.sh $target"
-it $1 \
sh -c "HOME=/tmp PATH=\$PATH:/rust/bin ci/run.sh"
}

if [ -z $1 ]; then
Expand Down
51 changes: 36 additions & 15 deletions ci/run.sh
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
set -ex

test_gen() {
echo 'extern crate volatile_register;' > /tmp/foo/src/lib.rs
cargo run --release -- -i /tmp/STM32F30x.svd $1 >> /tmp/foo/src/lib.rs
cargo build --manifest-path /tmp/foo/Cargo.toml
echo 'extern crate volatile_register;' > $td/src/lib.rs
cargo run $flags --release -- -i $td/STM32F30x.svd $1 >> $td/src/lib.rs
cargo build $flags --manifest-path $td/Cargo.toml
}

main() {
export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib/rustlib/${1}/lib
export USER=rust
test_mode() {
# test crate
cargo init --name foo $td
echo 'volatile-register = "0.1.0"' >> $td/Cargo.toml

curl -L \
https://raw.githubusercontent.com/posborne/cmsis-svd/master/data/STMicro/STM32F30x.svd \
> /tmp/STM32F30x.svd
https://raw.githubusercontent.com/posborne/cmsis-svd/python-0.4/data/STMicro/STM32F30x.svd \
> $td/STM32F30x.svd

# test the library
cargo build --release
cargo build $flags
cargo build $flags --release

# test repository
cargo new /tmp/foo
echo 'volatile-register = "0.1.0"' >> /tmp/foo/Cargo.toml

# test generated code
# test the generated code
test_gen
test_gen dbgmcu
test_gen gpioa
Expand All @@ -31,4 +29,27 @@ main() {
test_gen tim6
}

main $1
deploy_mode() {
cargo rustc $flags --release --bin svd2rust -- -C lto
}

run() {
flags="--target $TARGET"

case $TRAVIS_OS_NAME in
linux)
td=$(mktemp -d)
;;
osx)
td=$(mktemp -d -t tmp)
;;
esac

if [ -z $TRAVIS_TAG ]; then
test_mode
else
deploy_mode
fi
}

run
1 change: 0 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#![feature(plugin)]
#![recursion_limit="100"]

extern crate inflections;
Expand Down
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ fn main() {
.arg(Arg::with_name("peripheral")
.help("Pattern used to select a single peripheral")
.value_name("PATTERN"))
.version(include_str!(concat!(env!("OUT_DIR"), "/version.txt")))
.version(env!("CARGO_PKG_VERSION"))
.get_matches();

let xml = &mut String::new();
Expand Down

0 comments on commit 4b53d39

Please sign in to comment.