Skip to content

Commit

Permalink
ci: Add GitHub releases to CI (starship#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
matchai authored Jul 14, 2019
1 parent 77ba97d commit 0703a74
Show file tree
Hide file tree
Showing 17 changed files with 367 additions and 83 deletions.
80 changes: 67 additions & 13 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,77 @@
jobs:
# Check formatting
- template: ci/azure-rustfmt.yml
- template: ci/rustfmt.yml
parameters:
name: rustfmt
displayName: Check formatting

# Test with Rust stable
- template: ci/azure-test-stable.yml
# Run linter
- template: ci/cargo-clippy.yml
parameters:
name: test_starship
displayName: Test starship
name: cargo_clippy
displayName: Run linter

# Test with Rust nightly
- template: ci/azure-test-nightly.yml
# Cargo check
- template: ci/cargo-check.yml
parameters:
name: test_nightly
displayName: Check starship with nightly
name: cargo_check
displayName: Cargo check

# Run the integration tests in a Docker container
- template: ci/azure-test-docker.yml
parameters:
##############
# Test stage #
##############

# Test stable
- template: ci/test.yml
parameters:
dependsOn:
- cargo_check
name: cargo_test_stable
displayName: Cargo test
cross: true # Test on Windows and macOS

# Test nightly
- template: ci/test.yml
parameters:
name: cargo_test_nightly
displayName: Cargo test
rust_version: nightly

# Test docker
# Runs integration tests as a starship developer would run them locally
- template: ci/test-docker.yml
parameters:
name: test_docker
displayName: Test starship Docker
displayName: Docker test

################
# Release stage #
################

# Release binary
- template: ci/github-release.yml
parameters:
name: github_release
dependsOn:
- rustfmt
- cargo_check
- cargo_clippy
- cargo_test_stable
- test_docker
rust_version: stable
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
contents: |
*
!*.rlib
!*.d
!.*
targets:
- x86_64-unknown-linux-gnu
# Windows support temporarily disabled
# - x86_64-pc-windows-gnu
# - x86_64-pc-windows-msvc
- x86_64-apple-darwin
github:
gitHubConnection: StarshipRelease
repositoryName: starship/starship
isPreRelease: true
16 changes: 0 additions & 16 deletions ci/azure-rustfmt.yml

This file was deleted.

13 changes: 0 additions & 13 deletions ci/azure-test-nightly.yml

This file was deleted.

26 changes: 0 additions & 26 deletions ci/azure-test-stable.yml

This file was deleted.

13 changes: 13 additions & 0 deletions ci/cargo-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
parameters:
rust_version: stable

jobs:
- job: ${{ parameters.name }}
displayName: ${{ parameters.displayName }}
pool:
vmImage: ubuntu-16.04
steps:
- template: install-rust.yml

- script: cargo check
displayName: Check features
13 changes: 13 additions & 0 deletions ci/cargo-clippy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
parameters:
rust_version: stable

jobs:
- job: ${{ parameters.name }}
displayName: ${{ parameters.displayName }}
pool:
vmImage: ubuntu-16.04
steps:
- template: install-rust.yml

- script: cargo clippy --all
displayName: Run clippy
166 changes: 166 additions & 0 deletions ci/github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
parameters:
rust_version: stable
github:
isPreRelease: false
repositoryName: "$(Build.Repository.Name)"
dependsOn: []
displayName: "Release to github"
tarCompression: "none"
archiveType: "zip"
archiveName: "$(Build.Repository.Name)"

jobs:
- job: ${{ parameters.name }}
condition: ${{ parameters.condition }}
displayName: ${{ parameters.displayName }}
dependsOn: ${{ parameters.dependsOn }}
pool:
vmImage: ubuntu-16.04
steps:
- template: install-cross-rust.yml

- bash: |
MY_TAG="$(Build.SourceBranch)"
MY_TAG=${MY_TAG#refs/tags/}
echo $MY_TAG
echo "##vso[task.setvariable variable=build.my_tag]$MY_TAG"
DATE="$(date +%Y-%m-%d)"
echo "##vso[task.setvariable variable=build.date]$DATE"
displayName: "Create date and tag variables"
- ${{ each build_target in parameters.targets }}:
- ? ${{ if not(or(eq(build_target, 'x86_64-apple-darwin'), eq(build_target, 'x86_64-pc-windows-msvc'))) }}
: - script: |
echo Start building ${{ build_target }}
cross build --target ${{ build_target }} --release
ls -l
ls -l target/${{ build_target }}/release/*
displayName: Relase build for target ${{ build_target }}
- task: CopyFiles@2
displayName: Copy files for target ${{ build_target }}
inputs:
sourceFolder: "$(Build.SourcesDirectory)/target/${{ build_target }}/release"
contents: ${{ parameters.contents }}
targetFolder: "$(Build.BinariesDirectory)/${{ build_target }}"
- task: ArchiveFiles@2
displayName: Gather assets
inputs:
rootFolderOrFile: "$(Build.BinariesDirectory)/${{ build_target }}"
archiveType: ${{ parameters.archiveType }}
tarCompression: ${{ parameters.tarCompression }}
archiveFile: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}-$(build.my_tag)-${{ build_target }}.zip"
- task: GitHubRelease@0
displayName: Create release
inputs:
gitHubConnection: ${{ parameters.github.gitHubConnection }}
tagSource: manual
title: "$(build.my_tag) - $(build.date)"
tag: "$(build.my_tag)"
assetUploadMode: replace
action: edit
assets: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}*"
repositoryName: ${{ parameters.github.repositoryName }}
isPreRelease: ${{ parameters.github.isPreRelease }}

- ${{ each build_target in parameters.targets }}:
- ${{ if eq(build_target, 'x86_64-apple-darwin') }}:
- job: ${{ parameters.name }}_macOS
condition: ${{ parameters.condition }}
displayName: ${{ parameters.displayName }} (macOS)
dependsOn: ${{ parameters.dependsOn }}
pool:
vmImage: macOS-10.13
steps:
- template: install-rust.yml

- bash: |
MY_TAG="$(Build.SourceBranch)"
MY_TAG=${MY_TAG#refs/tags/}
echo $MY_TAG
echo "##vso[task.setvariable variable=build.my_tag]$MY_TAG"
DATE="$(date +%Y-%m-%d)"
echo "##vso[task.setvariable variable=build.date]$DATE"
displayName: "Create date and tag variables"
- script: |
echo Start building ${{ build_target }}
cargo build --release
ls -l
ls -l target/release/*
displayName: Relase build for target ${{ build_target }}
- task: CopyFiles@2
displayName: Copy files for target ${{ build_target }}
inputs:
sourceFolder: "$(Build.SourcesDirectory)/target/release"
contents: ${{ parameters.contents }}
targetFolder: "$(Build.BinariesDirectory)/${{ build_target }}"
- task: ArchiveFiles@2
displayName: Gather assets
inputs:
rootFolderOrFile: "$(Build.BinariesDirectory)/${{ build_target }}"
archiveType: ${{ parameters.archiveType }}
tarCompression: ${{ parameters.tarCompression }}
archiveFile: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}-$(build.my_tag)-${{ build_target }}.zip"

- task: GitHubRelease@0
displayName: Create release
inputs:
gitHubConnection: ${{ parameters.github.gitHubConnection }}
tagSource: manual
title: "$(build.my_tag) - $(build.date)"
tag: "$(build.my_tag)"
assetUploadMode: replace
action: edit
assets: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}*"
repositoryName: ${{ parameters.github.repositoryName }}
isPreRelease: ${{ parameters.github.isPreRelease }}

- ${{ if eq(build_target, 'x86_64-pc-windows-msvc') }}:
- job: ${{ parameters.name }}_msvc
condition: ${{ parameters.condition }}
displayName: ${{ parameters.displayName }} (Windows)
dependsOn: ${{ parameters.dependsOn }}
pool:
vmImage: vs2017-win2016
steps:
- template: install-rust.yml

- bash: |
MY_TAG="$(Build.SourceBranch)"
MY_TAG=${MY_TAG#refs/tags/}
echo $MY_TAG
echo "##vso[task.setvariable variable=build.my_tag]$MY_TAG"
DATE="$(date +%Y-%m-%d)"
echo "##vso[task.setvariable variable=build.date]$DATE"
displayName: "Create date and tag variables"
- script: |
echo Start building ${{ build_target }}
cargo build --release
ls -l
ls -l target/release/*
displayName: Relase build for target ${{ build_target }}
- task: CopyFiles@2
displayName: Copy files for target ${{ build_target }}
inputs:
sourceFolder: "$(Build.SourcesDirectory)/target/release"
contents: ${{ parameters.contents }}
targetFolder: "$(Build.BinariesDirectory)/${{ build_target }}"
- task: ArchiveFiles@2
displayName: Gather assets
inputs:
rootFolderOrFile: "$(Build.BinariesDirectory)/${{ build_target }}"
archiveType: ${{ parameters.archiveType }}
tarCompression: ${{ parameters.tarCompression }}
archiveFile: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}-$(build.my_tag)-${{ build_target }}.zip"

- task: GitHubRelease@0
displayName: Create release
inputs:
gitHubConnection: ${{ parameters.github.gitHubConnection }}
tagSource: manual
title: "$(build.my_tag) - $(build.date)"
tag: "$(build.my_tag)"
assetUploadMode: replace
action: edit
assets: "$(Build.ArtifactStagingDirectory)/${{ parameters.archiveName }}*"
repositoryName: ${{ parameters.github.repositoryName }}
isPreRelease: ${{ parameters.github.isPreRelease }}
47 changes: 47 additions & 0 deletions ci/install-cross-rust.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# defaults for any parameters that aren't specified
parameters:
rust_version: stable

steps:
# Linux and macOS
- script: |
set -e
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN
echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin:/usr/local/cargo/bin"
env:
RUSTUP_TOOLCHAIN: ${{parameters.rust_version}}
displayName: "Install rust (*nix)"
condition: not(eq(variables['Agent.OS'], 'Windows_NT'))
# Windows
- script: |
curl -sSf -o rustup-init.exe https://win.rustup.rs
rustup-init.exe -y --default-toolchain %RUSTUP_TOOLCHAIN%
set PATH=%PATH%;%USERPROFILE%\.cargo\bin
echo "##vso[task.setvariable variable=PATH;]%PATH%;%USERPROFILE%\.cargo\bin"
env:
RUSTUP_TOOLCHAIN: ${{parameters.rust_version}}
displayName: "Install rust (windows)"
condition: eq(variables['Agent.OS'], 'Windows_NT')
# Install additional components:
- ${{ each component in parameters.components }}:
- script: rustup component add ${{ component }}

# TEMPORATY FIX UNTIL https://github.com/rust-embedded/cross/pull/169 is merged.
- script: |
git config --global user.email "[email protected]"
git config --global user.name "I merge the things"
git clone https://github.com/rust-embedded/cross
cd cross
git remote add pitkley https://github.com/pitkley/cross
git fetch pitkley
git checkout 718a19c
git merge -m "No pseudo tty" pitkley/docker-no-pseudo-tty
cargo install --force --path .
displayName: Instaling cross supprot
# All platforms
- script: |
rustup -V
rustup component list --installed
rustc -Vv
cargo -V
displayName: Query rust and cargo versions
Loading

0 comments on commit 0703a74

Please sign in to comment.