2019-10-05 09:29:13 +00:00
name : Main workflow
2019-10-10 07:12:45 +00:00
on :
push :
paths-ignore :
- "docs/**"
2019-10-14 15:34:26 +00:00
- "**.md"
2019-10-15 15:32:41 +00:00
pull_request :
paths-ignore :
- "docs/**"
- "**.md"
2019-10-10 07:12:45 +00:00
2019-10-04 06:12:48 +00:00
jobs :
# Run the `rustfmt` code formatter
rustfmt :
name : Rustfmt [Formatter]
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
- uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
2019-10-20 14:19:40 +00:00
components : rustfmt
2019-10-04 06:12:48 +00:00
override : true
- run : rustup component add rustfmt
- uses : actions-rs/cargo@v1
with :
command : fmt
args : --all -- --check
# Run the `clippy` linting tool
clippy :
name : Clippy [Linter]
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
- uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
2019-10-20 14:19:40 +00:00
components : clippy
2019-10-04 06:12:48 +00:00
override : true
- uses : actions-rs/clippy-check@v1
with :
token : ${{ secrets.GITHUB_TOKEN }}
args : --all-targets --all-features -- -D clippy::all
# Run a security audit on dependencies
cargo_audit :
name : Cargo Audit [Security]
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
- uses : actions-rs/toolchain@v1
with :
toolchain : stable
override : true
- run : cargo install --force cargo-audit
- run : cargo generate-lockfile
- uses : actions-rs/cargo@v1
with :
command : audit
# Ensure that the project could be successfully compiled
cargo_check :
name : Compile
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
- uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
override : true
- uses : actions-rs/cargo@v1
with :
command : check
args : --all
2019-10-15 15:10:16 +00:00
# Run tests on Linux, macOS, and Windows
2019-10-04 06:12:48 +00:00
# On both Rust stable and Rust nightly
test :
name : Test Suite
needs : [ cargo_check]
runs-on : ${{ matrix.os }}
strategy :
fail-fast : false
matrix :
2019-10-15 15:10:16 +00:00
os : [ ubuntu-latest, macOS-latest, windows-latest]
2019-10-04 06:12:48 +00:00
rust : [ stable, nightly]
steps :
# Checkout the branch being tested
- uses : actions/checkout@v1
# Install all the required dependencies for testing
- uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
override : true
# Install Node.js at a fixed version
2019-10-25 11:44:20 +00:00
- uses : actions/setup-node@v1
2019-10-04 06:12:48 +00:00
with :
node-version : "12.0.0"
# Install Golang at a fixed version
2019-10-25 11:44:20 +00:00
- uses : actions/setup-go@v1
2019-10-04 06:12:48 +00:00
with :
go-version : "1.12.1"
# Install Ruby at a fixed version
2019-10-25 11:44:20 +00:00
- uses : actions/setup-ruby@v1
2019-10-04 06:12:48 +00:00
with :
ruby-version : "2.6.3"
# Install Python at a fixed version
2019-10-25 11:44:20 +00:00
- uses : actions/setup-python@v1
2019-10-04 06:12:48 +00:00
with :
2019-11-05 07:23:33 +00:00
python-version : "3.7.5"
2019-10-04 06:12:48 +00:00
# Install dotnet at a fixed version
2019-10-25 11:44:20 +00:00
- uses : actions/setup-dotnet@v1
2019-10-04 06:12:48 +00:00
with :
dotnet-version : "2.2.402"
2019-12-05 18:04:27 +00:00
# Install PHP at a fixed version
2019-12-20 15:14:25 +00:00
- uses : shivammathur/setup-php@v1
2019-12-05 18:04:27 +00:00
with :
2019-12-20 15:14:25 +00:00
php-version : "7.3"
2019-12-05 18:04:27 +00:00
2019-12-02 22:37:18 +00:00
# Install Mercurial (pre-installed on linux, installed from pip on macos
# and from choco on windows),
- name : Install Mercurial (macos)
if : matrix.os == 'macOS-latest'
env :
HGPYTHON3 : 1
run : pip install mercurial
- name : Install Mercurial (windows)
if : matrix.os == 'windows-latest'
run : choco install hg
2019-12-13 19:22:38 +00:00
2019-12-09 01:42:51 +00:00
# Install Terraform at a fixed version
- uses : volcano-coffee-company/setup-terraform@v1
with :
version : "0.12.14"
2019-12-02 22:37:18 +00:00
2019-10-04 06:12:48 +00:00
# Run the ignored tests that expect the above setup
- name : Run all tests
uses : actions-rs/cargo@v1
with :
command : test
args : -- -Z unstable-options --include-ignored
# Run the tests in the Docker image
docker_test :
name : Test in Docker
needs : [ cargo_check]
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@master
- name : Pull the pre-built Docker image
run : docker pull starshipcommand/starship-test
- name : Fix file permissions
run : chmod -R a+w .
- name : Build the Docker image
run :
docker build -f tests/Dockerfile --tag starshipcommand/starship-test --cache-from
starshipcommand/starship-test .
- name : Run tests in Docker
run : docker run --rm -v $(pwd):/src/starship starshipcommand/starship-test
2019-10-04 15:17:29 +00:00
# Publish starship to Crates.io
2019-10-04 06:12:48 +00:00
cargo_publish :
if : startsWith(github.ref, 'refs/tags/v')
2019-10-04 14:22:14 +00:00
name : Publish Cargo Package
2019-10-04 06:12:48 +00:00
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
- uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
override : true
2019-10-04 14:22:14 +00:00
- run : cargo login $CRATES_IO_TOKEN
- run : cargo publish
2019-10-04 14:54:21 +00:00
env :
CRATES_IO_TOKEN : ${{ secrets.CRATES_IO_TOKEN }}
2019-10-04 06:12:48 +00:00
2019-12-13 19:22:38 +00:00
update_brew_formula :
if : startsWith(github.ref, 'refs/tags/v')
name : Update Brew Formula
runs-on : macos-latest
steps :
- uses : actions/checkout@v1
- run : |
2019-12-13 19:45:57 +00:00
echo "https://starship-bot:$HOMEBREW_GITHUB_API_TOKEN@github.com" > ~/.git-credentials
2019-12-13 19:22:38 +00:00
git config --global credential.helper store
git config --global user.name "Starship Bot"
git config --global user.email "bot@starship.rs"
2019-12-13 20:09:57 +00:00
cd $(brew --repo homebrew/core)
git fetch origin
sudo git reset --hard origin/master
cd -
2019-12-19 23:09:03 +00:00
brew bump-formula-pr --url=https://github.com/starship/starship/archive/$(git describe --tags).tar.gz --message="Automated release pull request using continuous integration. If you have any questions, please ping `@matchai`." --no-browse -v starship --force
2019-12-13 19:22:38 +00:00
env :
2019-12-13 19:45:57 +00:00
HOMEBREW_GITHUB_API_TOKEN : ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
2019-12-13 19:22:38 +00:00
2019-11-25 16:01:01 +00:00
# Build sources for every OS
github_build :
2019-10-04 06:12:48 +00:00
if : startsWith(github.ref, 'refs/tags/v')
2019-11-25 16:01:01 +00:00
name : Build release binaries
2019-10-04 06:12:48 +00:00
strategy :
fail-fast : false
matrix :
2019-10-04 12:47:09 +00:00
target :
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- x86_64-apple-darwin
2019-11-12 05:30:35 +00:00
- x86_64-pc-windows-msvc
2019-10-04 06:12:48 +00:00
include :
2019-10-04 12:47:09 +00:00
- target : x86_64-unknown-linux-gnu
os : ubuntu-latest
2019-10-04 06:12:48 +00:00
name : starship-x86_64-unknown-linux-gnu.tar.gz
2019-10-04 12:47:09 +00:00
- target : x86_64-unknown-linux-musl
os : ubuntu-latest
2019-10-04 06:12:48 +00:00
name : starship-x86_64-unknown-linux-musl.tar.gz
2019-10-04 12:47:09 +00:00
- target : x86_64-apple-darwin
os : macOS-latest
2019-10-04 06:12:48 +00:00
name : starship-x86_64-apple-darwin.tar.gz
2019-11-12 05:30:35 +00:00
- target : x86_64-pc-windows-msvc
2019-10-15 15:10:16 +00:00
os : windows-latest
2019-11-12 05:30:35 +00:00
name : starship-x86_64-pc-windows-msvc.zip
2019-10-04 06:12:48 +00:00
runs-on : ${{ matrix.os }}
steps :
- uses : actions/checkout@v1
- name : Install Rust toolchain
uses : actions-rs/toolchain@v1
with :
2019-10-20 14:19:40 +00:00
profile : minimal
2019-10-04 06:12:48 +00:00
toolchain : stable
override : true
target : ${{ matrix.target }}
- name : Install musl tools
if : matrix.target == 'x86_64-unknown-linux-musl'
2019-12-19 23:09:03 +00:00
# Install libssl-dev for openssl-sys
run : sudo apt-get install -y musl-tools libssl-dev
2019-10-04 06:12:48 +00:00
- name : Build target
uses : actions-rs/cargo@v1
with :
command : build
args : --release --target ${{ matrix.target }}
2019-10-20 14:19:40 +00:00
- name : Prepare build artifacts [Windows]
if : matrix.os == 'windows-latest'
2019-10-04 06:12:48 +00:00
run : |
2019-11-13 01:50:57 +00:00
cd target/${{ matrix.target }}/release
strip starship.exe
7z a ../../../${{ matrix.name }} starship.exe
cd -
2019-10-20 14:19:40 +00:00
- name : Prepare build artifacts [-nix]
if : matrix.os != 'windows-latest'
run : |
2019-11-13 01:50:57 +00:00
cd target/${{ matrix.target }}/release
strip starship
tar czvf ../../../${{ matrix.name }} starship
cd -
2019-10-04 06:12:48 +00:00
2019-11-25 16:01:01 +00:00
- name : Upload build artifact
uses : actions/upload-artifact@v1
with :
name : ${{ matrix.name }}
path : ${{ matrix.name }}
# Create GitHub release with Rust build targets and release notes
github_release :
if : startsWith(github.ref, 'refs/tags/v')
name : Create GitHub Release
needs : github_build
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v1
# These can be squashed when https://github.com/actions/download-artifact/issues/6 is closed
- name : Download releases from github_build
uses : actions/download-artifact@v1
with :
name : starship-x86_64-unknown-linux-gnu.tar.gz
path : .
- name : Download releases from github_build
uses : actions/download-artifact@v1
with :
name : starship-x86_64-unknown-linux-musl.tar.gz
path : .
- name : Download releases from github_build
uses : actions/download-artifact@v1
with :
name : starship-x86_64-apple-darwin.tar.gz
path : .
- name : Download releases from github_build
uses : actions/download-artifact@v1
with :
name : starship-x86_64-pc-windows-msvc.zip
path : .
- name : Generate checksums
run : for file in starship-*; do openssl dgst -sha256 -r "$file" | awk '{print $1}' > "${file}.sha256"; done
2019-10-04 06:12:48 +00:00
- name : Generate release notes
run : |
# Temporary fix for https://github.com/actions/setup-go/issues/14
export PATH=$PATH:$(go env GOPATH)/bin
go get -u github.com/git-chglog/git-chglog/cmd/git-chglog
2019-10-04 14:54:21 +00:00
git-chglog -c .github/chglog/release.yml $(git describe --tags) > RELEASE.md
2019-10-04 06:12:48 +00:00
- name : Create GitHub release ${{ matrix.target }}
uses : softprops/action-gh-release@v1
with :
2019-11-25 16:01:01 +00:00
files : |
starship-x86_64-unknown-linux-gnu.tar.gz
starship-x86_64-unknown-linux-gnu.tar.gz.sha256
starship-x86_64-unknown-linux-musl.tar.gz
starship-x86_64-unknown-linux-musl.tar.gz.sha256
starship-x86_64-apple-darwin.tar.gz
starship-x86_64-apple-darwin.tar.gz.sha256
starship-x86_64-pc-windows-msvc.zip
starship-x86_64-pc-windows-msvc.zip.sha256
2019-10-04 14:54:21 +00:00
body_path : RELEASE.md
2019-10-04 06:12:48 +00:00
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}