Skip to content

Commit

Permalink
Auto merge of #536 - nix-rust:new-ci/master, r=kamalmarhubi
Browse files Browse the repository at this point in the history
Merge New CI Infrastructure Based on Trust/Cross Into Master

See discussion on #528.  This PR is to track the final decision of whether we are ready to merge the new CI infrastructure (and related bug fixes) back into master.  Initially, we know that the branch is not ready to merge (as there are still failing tests).

This PR acts as a single point of reference to get the current status of how close we are to merging things back into master.  A number of issues with "TRUST CI" in the title have been created for the work that appears to be required to get us to the point where this branch can be merged.
  • Loading branch information
homu committed Apr 15, 2017
2 parents 44c0ecb + 56f5a0a commit 635c871
Show file tree
Hide file tree
Showing 20 changed files with 637 additions and 720 deletions.
211 changes: 120 additions & 91 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,102 +1,131 @@
#
# Operating Environment
#
language: rust
sudo: false
# Based on the "trust" template v0.1.1
# https://github.com/japaric/trust/tree/v0.1.1

dist: trusty
services:
- docker
addons:
apt:
packages:
- gcc-multilib
- libcurl4-openssl-dev
- libelf-dev
- libdw-dev
- binutils-dev

rust:
- 1.7.0 # Oldest supported version
- stable
- beta
- nightly

#
# Environment Variables and Build Matrix
#
language: rust
services: docker
sudo: required

# This is the Rust channel that build jobs will use by default but can be
# overridden on a case by case basis down below
rust: 1.13.0

env:
global:
- PATH=$HOME/.local/bin:$PATH
- TRAVIS_CARGO_NIGHTLY_FEATURE=""
matrix:
- ARCH=x86_64
- ARCH=i686
- CRATE_NAME=nix
- CARGO_TEST_THREADS=1

os: # OSX included in build matrix explicitly
- linux
# default job
- TARGET=x86_64-unknown-linux-gnu

# Failures on nightly shouldn't fail the overall build.
matrix:
fast_finish: true
# These are all the build jobs. Adjust as necessary. Comment out what you
# don't need
include:
# 32-bit and 64-bit OSX builds on oldest/stable
- os: osx
env: ARCH=x86_64
rust: stable
- os: osx
env: ARCH=i686
rust: stable
# Docker builds for other targets
- os: linux
env: TARGET=aarch64-unknown-linux-gnu DOCKER_IMAGE=posborne/rust-cross:arm
rust: 1.7.0
sudo: true
- os: linux
env: TARGET=arm-unknown-linux-gnueabihf DOCKER_IMAGE=posborne/rust-cross:arm
rust: 1.7.0
sudo: true
- os: linux
env: TARGET=mips-unknown-linux-gnu DOCKER_IMAGE=posborne/rust-cross:mips
rust: 1.7.0
sudo: true
- os: linux
env: TARGET=mipsel-unknown-linux-gnu DOCKER_IMAGE=posborne/rust-cross:mips
rust: 1.7.0
sudo: true
- os: linux
env: TARGET=arm-linux-androideabi DOCKER_IMAGE=posborne/rust-cross:android
rust: 1.7.0
sudo: true
allow_failures:
- rust: nightly
# We need to upgrade the lowest supported version. However, the build
# infrastructure for arm/mips/android is not ready yet.
- rust: 1.7.0
- env: TARGET=mips-unknown-linux-gnu DOCKER_IMAGE=posborne/rust-cross:mips
- env: TARGET=mipsel-unknown-linux-gnu DOCKER_IMAGE=posborne/rust-cross:mips
- env: TARGET=arm-linux-androideabi DOCKER_IMAGE=posborne/rust-cross:android
# Linux
- env: TARGET=i686-unknown-linux-gnu
- env: TARGET=i686-unknown-linux-musl
# - env: TARGET=x86_64-unknown-linux-gnu # this is the default job
- 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

# Other architectures
- env: TARGET=aarch64-unknown-linux-gnu
- env: TARGET=armv7-unknown-linux-gnueabihf
- 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
- env: TARGET=arm-unknown-linux-gnueabi
# - env: TARGET=arm-unknown-linux-musleabi

# Testing beta on main targets
- env: TARGET=x86_64-unknown-linux-gnu
rust: beta
- env: TARGET=x86_64-apple-darwin
os: osx
rust: beta

#
# Build/Test/Deploy Steps
#
before_script:
- pip install 'travis-cargo<0.2' --user
# Testing nightly on main targets (allowed to fail)
- env: TARGET=x86_64-unknown-linux-gnu
rust: nightly
- env: TARGET=x86_64-apple-darwin
os: osx
rust: nightly

# Testing nightlies on main targets. These might fail because of issues
# with the compiler, so we allow failures here.
allow_failures:
# Failures for nightlies may be because of compiler bugs, so don't fail the
# build if these fail.
- env: TARGET=x86_64-unknown-linux-gnu
rust: nightly
- env: TARGET=x86_64-apple-darwin
os: osx
rust: nightly
# FIXME: targets that should pass but are currently failing
- env: TARGET=i686-unknown-linux-musl
- env: TARGET=x86_64-unknown-linux-musl
- env: TARGET=mips-unknown-linux-gnu
- env: TARGET=mipsel-unknown-linux-gnu
- env: TARGET=powerpc-unknown-linux-gnu

install:
- sh ci/install.sh
- source ~/.cargo/env || true

script:
- bash ci/run-travis.sh
- |
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
travis-cargo --only stable doc
fi
after_success:
- |
if [ "$TRAVIS_OS_NAME" = "linux" ] && \
[ "$TRAVIS_RUST_VERSION" = "stable" ] && \
[ "$ARCH" = "x86_64" ]; then
# Upload docs for stable (on master) to gh-pages
travis-cargo --only stable doc-upload
# Measure code coverage using kcov and upload to coveralls.io
travis-cargo coveralls --no-sudo --verify
fi
- bash ci/script.sh

before_deploy:
- sh ci/before_deploy.sh

deploy:
# TODO update `api_key.secure`
# - Create a `public_repo` GitHub token. Go to: https://github.com/settings/tokens/new
# - Encrypt it: `travis encrypt GH_TOKEN=0123456789012345678901234567890123456789`
# - Paste the output down here
api_key:
secure: S1ktt0eqmfrEHnYPf4WO7mZtatz/FWfYWBp8nwdc0nd8H6UNZ9Dwy3tJpVe0N9rpB9vAFnkdw6R4jdkIcgxfory2F3F8k/mh8cWn0mkvh2N34YjHMYLnuVzOoFrWai7IcPfROpdlY0tGBlwNj5KMkeBnHUJzd2q4j/4j/tlrfmg=
file_glob: true
file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.*
on:
# Here you can pick which targets will generate binary releases
# In this example, there are some targets that are tested using the stable
# and nightly channels. This condition makes sure there is only one release
# for such targets and that's generated using the stable channel
#
# Here we make it so we never generate binary releases
condition: $DEPLOY = never
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
24 changes: 15 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,24 @@ This project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]

<!--### Added-->
### Added
- Added `nix::unistd::{openat, fstatat, readlink, readlinkat}`
([#497](https://github.com/nix-rust/nix/pull/551))
([#551](https://github.com/nix-rust/nix/pull/551))

### Changed
- Marked `sys::mman::{ mmap, munmap, madvise, munlock, msync }` as unsafe.
([#559](https://github.com/nix-rust/nix/pull/559))

<!--### Fixed-->
- Minimum supported Rust version is now 1.13
- Removed `revents` argument from `PollFd::new()` as it's an output argument and
will be overwritten regardless of value.
([#542](https://github.com/nix-rust/nix/pull/542)

### Fixed
- Fixed multiple issues compiling under different archetectures and OSes.
Now compiles on Linux/MIPS ([#538](https://github.com/nix-rust/nix/pull/538)),
`Linux/PPC` ([#553](https://github.com/nix-rust/nix/pull/553)),
`MacOS/x86_64,i686` ([#553](https://github.com/nix-rust/nix/pull/553),
and `NetBSD/x64_64` ([#538](https://github.com/nix-rust/nix/pull/538).

## [0.8.0] 2017-03-02

Expand Down Expand Up @@ -60,8 +69,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
([#540](https://github.com/nix-rust/nix/pull/540)

### Changed
- `::nix::sys::termios::{cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed}`
switched to use `BaudRate` enum from `speed_t`.
- `::nix::sys::termios::{cfgetispeed, cfsetispeed, cfgetospeed, cfsetospeed}`
switched to use `BaudRate` enum from `speed_t`.
([#518](https://github.com/nix-rust/nix/pull/518))
- `epoll_ctl` now could accept None as argument `event`
when op is `EpollOp::EpollCtlDel`.
Expand Down Expand Up @@ -107,9 +116,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Exposed all fcntl(2) operations at the module level, so they can be
imported direclty instead of via `FcntlArg` enum.
([#541](https://github.com/nix-rust/nix/pull/541))
- Removed `revents` argument from `PollFd::new()` as it's an output argument and
will be overwritten regardless of value.
([#542](https://github.com/nix-rust/nix/pull/542)

### Fixed
- Fixed multiple issues with Unix domain sockets on non-Linux OSes
Expand Down
33 changes: 31 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,37 @@ pub unsafe extern fn gethostname(name: *mut c_char, len: size_t) -> c_int;
pub fn gethostname(name: &mut [u8]) -> Result<()>;
```

## Requirements
Rust >= 1.9.0
## Supported Platforms

nix target support consists of three tiers:

* Tier 1 - Target is supported and CI both builds and tests
* Tier 2 - Target is supported and CI builds the target
* Tier 3 - Target is supported and CI both builds and tests but test failures
do not block merging code

The following targets are all supported by nix on Rust 1.13.0 or newer:

Tier 1:
* i686-unknown-linux-gnu
* x86_64-unknown-linux-gnu
* i686-apple-darwin
* x86_64-apple-darwin
* aarch64-unknown-linux-gnu
* armv7-unknown-linux-gnueabihf
* arm-unknown-linux-gnueabi

Tier 2:
* i686-unknown-freebsd
* x86_64-unknown-freebsd
* x86_64-unknown-netbsd

Tier 3:
* i686-unknown-linux-musl
* x86_64-unknown-linux-musl
* mips-unknown-linux-gnu
* mipsel-unknown-linux-gnu
* powerpc-unknown-linux-gnu

## Usage

Expand Down
48 changes: 0 additions & 48 deletions ci/README.md

This file was deleted.

23 changes: 23 additions & 0 deletions ci/before_deploy.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 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"

# TODO Update this to package the right artifacts
Copy-Item "$SRC_DIR\target\$($Env:TARGET)\release\hello.exe" '.\'

7z a "$ZIP" *

Push-AppveyorArtifact "$ZIP"

Remove-Item *.* -Force
Set-Location ..
Remove-Item $STAGE
Set-Location $SRC_DIR
Loading

0 comments on commit 635c871

Please sign in to comment.