mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-11-17 18:45:12 +00:00
e0254f26e2
Because of permissions issues with having bots push to master, it looks like it won't be possible to do from an Action right now.
265 lines
7.7 KiB
YAML
265 lines
7.7 KiB
YAML
name: Main workflow
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "**.md"
|
|
pull_request:
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "**.md"
|
|
|
|
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:
|
|
profile: minimal
|
|
toolchain: stable
|
|
components: rustfmt
|
|
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:
|
|
profile: minimal
|
|
toolchain: stable
|
|
components: clippy
|
|
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:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
command: check
|
|
args: --all
|
|
|
|
# Run tests on Linux, macOS, and Windows
|
|
# On both Rust stable and Rust nightly
|
|
test:
|
|
name: Test Suite
|
|
needs: [cargo_check]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macOS-latest, windows-latest]
|
|
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:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
# Install Node.js at a fixed version
|
|
- uses: actions/setup-node@v1
|
|
with:
|
|
node-version: "12.0.0"
|
|
|
|
# Install Golang at a fixed version
|
|
- uses: actions/setup-go@v1
|
|
with:
|
|
go-version: "1.12.1"
|
|
|
|
# Install Ruby at a fixed version
|
|
- uses: actions/setup-ruby@v1
|
|
with:
|
|
ruby-version: "2.6.3"
|
|
|
|
# Install Python at a fixed version
|
|
- uses: actions/setup-python@v1
|
|
with:
|
|
python-version: "3.7.4"
|
|
|
|
# Install dotnet at a fixed version
|
|
- uses: actions/setup-dotnet@v1
|
|
with:
|
|
dotnet-version: "2.2.402"
|
|
|
|
# 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
|
|
|
|
# Publish starship to Crates.io
|
|
cargo_publish:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Publish Cargo Package
|
|
needs: [test, docker_test]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
- run: cargo login $CRATES_IO_TOKEN
|
|
- run: cargo publish
|
|
env:
|
|
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
|
|
|
|
# Create a PR to bump the brew formula version
|
|
brew_bump_formula:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Bump Brew Formula
|
|
needs: [test, docker_test]
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- run: |
|
|
git config --global user.email "bot@starship.rs"
|
|
git config --global user.name "Starship Bot"
|
|
|
|
cd $(brew --repo homebrew/core)
|
|
git fetch origin
|
|
sudo git reset --hard origin/master
|
|
cd -
|
|
- run: brew bump-formula-pr --url=https://github.com/starship/starship/archive/$(git describe --tags).tar.gz --message="Automated release pull request using continuous integration." --no-browse -v starship --force
|
|
env:
|
|
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
|
|
|
# Create GitHub release with Rust build targets and release notes
|
|
github_release:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Create GitHub Release
|
|
needs: [test, docker_test]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target:
|
|
- x86_64-unknown-linux-gnu
|
|
- x86_64-unknown-linux-musl
|
|
- x86_64-apple-darwin
|
|
- x86_64-pc-windows-gnu
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
name: starship-x86_64-unknown-linux-gnu.tar.gz
|
|
- target: x86_64-unknown-linux-musl
|
|
os: ubuntu-latest
|
|
name: starship-x86_64-unknown-linux-musl.tar.gz
|
|
- target: x86_64-apple-darwin
|
|
os: macOS-latest
|
|
name: starship-x86_64-apple-darwin.tar.gz
|
|
- target: x86_64-pc-windows-gnu
|
|
os: windows-latest
|
|
name: starship-x86_64-pc-windows-gnu.zip
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
|
|
- name: Install Rust toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
target: ${{ matrix.target }}
|
|
|
|
- name: Install musl tools
|
|
if: matrix.target == 'x86_64-unknown-linux-musl'
|
|
run: sudo apt-get install -y musl-tools
|
|
|
|
- name: Build target
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: --release --target ${{ matrix.target }}
|
|
|
|
- name: Prepare build artifacts [Windows]
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
strip target/${{ matrix.target }}/release/starship.exe
|
|
7z a ${{ matrix.name }} target/${{ matrix.target }}/release/starship.exe
|
|
|
|
- name: Prepare build artifacts [-nix]
|
|
if: matrix.os != 'windows-latest'
|
|
run: |
|
|
strip target/${{ matrix.target }}/release/starship
|
|
tar czvf ${{ matrix.name }} target/${{ matrix.target }}/release/starship
|
|
|
|
- name: Generate release notes
|
|
if: matrix.os == 'ubuntu-latest'
|
|
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
|
|
git-chglog -c .github/chglog/release.yml $(git describe --tags) > RELEASE.md
|
|
|
|
- name: Create GitHub release ${{ matrix.target }}
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
files: ${{ matrix.name }}
|
|
body_path: RELEASE.md
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|