mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-09-21 18:39:00 +00:00
3cc7a6d6ac
This removes the hard requirement for a particular version of python in the CI, and just uses the default version. Since #1297 was merged we have not depended on the version of python that is installed. This should stop us from having to update the version of python when the github action updates the available versions.
327 lines
9.9 KiB
YAML
327 lines
9.9 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@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
components: rustfmt
|
|
override: true
|
|
- 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@v2
|
|
- 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
|
|
|
|
# Ensure that the project could be successfully compiled
|
|
cargo_check:
|
|
name: Compile
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Cache cargo registry
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/registry
|
|
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-registry-
|
|
- name: Cache cargo index
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/git
|
|
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-index-
|
|
- name: Cache cargo build
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: target
|
|
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
- 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
|
|
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@v2
|
|
|
|
# Cache files between builds
|
|
- name: Cache cargo registry
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/registry
|
|
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-registry-
|
|
- name: Cache cargo index
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/git
|
|
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-index-
|
|
- name: Cache cargo build
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: target
|
|
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
# Install all the required dependencies for testing
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
|
|
# Install dotnet at a fixed version
|
|
- uses: actions/setup-dotnet@v1
|
|
with:
|
|
dotnet-version: "2.2.402"
|
|
|
|
# Install Mercurial (pre-installed on Linux and windows)
|
|
- name: Install Mercurial (macos)
|
|
if: matrix.os == 'macOS-latest'
|
|
env:
|
|
HGPYTHON3: 1
|
|
run: pip install mercurial
|
|
|
|
# Install Terraform at a fixed version
|
|
- uses: volcano-coffee-company/setup-terraform@v1
|
|
with:
|
|
version: "0.12.14"
|
|
|
|
# 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
|
|
|
|
# Publish starship to Crates.io
|
|
cargo_publish:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Publish Cargo Package
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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 }}
|
|
|
|
update_brew_formula:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Update Brew Formula
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: mislav/bump-homebrew-formula-action@v1
|
|
with:
|
|
formula-name: starship
|
|
env:
|
|
COMMITTER_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
|
|
|
# Build sources for every OS
|
|
github_build:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
name: Build release binaries
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target:
|
|
- x86_64-unknown-linux-gnu
|
|
- x86_64-unknown-linux-musl
|
|
- x86_64-apple-darwin
|
|
- x86_64-pc-windows-msvc
|
|
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-msvc
|
|
os: windows-latest
|
|
name: starship-x86_64-pc-windows-msvc.zip
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Cache cargo registry
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/registry
|
|
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-registry-
|
|
- name: Cache cargo index
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ~/.cargo/git
|
|
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-cargo-index-
|
|
|
|
- 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
|
|
if: matrix.target != 'x86_64-unknown-linux-musl'
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: --release --target ${{ matrix.target }}
|
|
|
|
- name: Build target (musl)
|
|
if: matrix.target == 'x86_64-unknown-linux-musl'
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: --release --features tls-vendored --target ${{ matrix.target }}
|
|
|
|
- name: Prepare build artifacts [Windows]
|
|
if: matrix.os == 'windows-latest'
|
|
run: |
|
|
cd target/${{ matrix.target }}/release
|
|
strip starship.exe
|
|
7z a ../../../${{ matrix.name }} starship.exe
|
|
cd -
|
|
|
|
- name: Prepare build artifacts [-nix]
|
|
if: matrix.os != 'windows-latest'
|
|
run: |
|
|
cd target/${{ matrix.target }}/release
|
|
strip starship
|
|
tar czvf ../../../${{ matrix.name }} starship
|
|
cd -
|
|
|
|
- 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@v2
|
|
|
|
# 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
|
|
|
|
- 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
|
|
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: |
|
|
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
|
|
body_path: RELEASE.md
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|