mirror of
https://github.com/msfjarvis/gitice
synced 2025-08-14 22:07:00 +05:30
feat(ci): upgrade cargo-dist setup to 0.2.0-prerelease.5
This commit is contained in:
parent
4ee022abbc
commit
228dabecec
2 changed files with 100 additions and 32 deletions
115
.github/workflows/release.yml
vendored
115
.github/workflows/release.yml
vendored
|
@ -1,3 +1,6 @@
|
||||||
|
# Copyright 2022-2023, axodotdev
|
||||||
|
# SPDX-License-Identifier: MIT or Apache-2.0
|
||||||
|
#
|
||||||
# CI that:
|
# CI that:
|
||||||
#
|
#
|
||||||
# * checks for a Git Tag that looks like a release
|
# * checks for a Git Tag that looks like a release
|
||||||
|
@ -47,14 +50,15 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
has-releases: ${{ steps.create-release.outputs.has-releases }}
|
has-releases: ${{ steps.create-release.outputs.has-releases }}
|
||||||
|
releases: ${{ steps.create-release.outputs.releases }}
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Install Rust
|
with:
|
||||||
run: rustup update nightly-2023-02-22 --no-self-update && rustup default nightly-2023-02-22
|
submodules: recursive
|
||||||
- name: Install cargo-dist
|
- name: Install cargo-dist
|
||||||
run: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.6/cargo-dist-installer.sh | sh
|
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.sh | sh"
|
||||||
- id: create-release
|
- id: create-release
|
||||||
run: |
|
run: |
|
||||||
cargo dist plan --tag=${{ github.ref_name }} --output-format=json > dist-manifest.json
|
cargo dist plan --tag=${{ github.ref_name }} --output-format=json > dist-manifest.json
|
||||||
|
@ -75,36 +79,37 @@ jobs:
|
||||||
# Disable all the upload-artifacts tasks if we have no actual releases
|
# Disable all the upload-artifacts tasks if we have no actual releases
|
||||||
HAS_RELEASES=$(jq --raw-output ".releases != null" dist-manifest.json)
|
HAS_RELEASES=$(jq --raw-output ".releases != null" dist-manifest.json)
|
||||||
echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT"
|
echo "has-releases=$HAS_RELEASES" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "releases=$(jq --compact-output ".releases" dist-manifest.json)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Build and packages all the things
|
# Build and packages all the platform-specific things
|
||||||
upload-artifacts:
|
upload-local-artifacts:
|
||||||
# Let the initial task tell us to not run (currently very blunt)
|
# Let the initial task tell us to not run (currently very blunt)
|
||||||
needs: create-release
|
needs: create-release
|
||||||
if: ${{ needs.create-release.outputs.has-releases == 'true' }}
|
if: ${{ needs.create-release.outputs.has-releases == 'true' }}
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
# For these target platforms
|
# For these target platforms
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-20.04
|
- os: "macos-11"
|
||||||
dist-args: --artifacts=global
|
dist-args: "--artifacts=local --target=aarch64-apple-darwin"
|
||||||
install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.6/cargo-dist-installer.sh | sh
|
install-dist: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.sh | sh"
|
||||||
- os: macos-11
|
- os: "macos-11"
|
||||||
dist-args: --artifacts=local --target=aarch64-apple-darwin --target=x86_64-apple-darwin
|
dist-args: "--artifacts=local --target=x86_64-apple-darwin"
|
||||||
install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.6/cargo-dist-installer.sh | sh
|
install-dist: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.sh | sh"
|
||||||
- os: ubuntu-20.04
|
- os: "windows-2019"
|
||||||
dist-args: --artifacts=local --target=x86_64-unknown-linux-gnu
|
dist-args: "--artifacts=local --target=x86_64-pc-windows-msvc"
|
||||||
install-dist: curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.0.6/cargo-dist-installer.sh | sh
|
install-dist: "irm https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.ps1 | iex"
|
||||||
- os: windows-2019
|
- os: "ubuntu-20.04"
|
||||||
dist-args: --artifacts=local --target=x86_64-pc-windows-msvc
|
dist-args: "--artifacts=local --target=x86_64-unknown-linux-gnu"
|
||||||
install-dist: irm https://github.com/axodotdev/cargo-dist/releases/download/v0.0.6/cargo-dist-installer.ps1 | iex
|
install-dist: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.sh | sh"
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Install Rust
|
with:
|
||||||
run: rustup update nightly-2023-02-22 --no-self-update && rustup default nightly-2023-02-22
|
submodules: recursive
|
||||||
- name: Install cargo-dist
|
- name: Install cargo-dist
|
||||||
run: ${{ matrix.install-dist }}
|
run: ${{ matrix.install-dist }}
|
||||||
- name: Run cargo-dist
|
- name: Run cargo-dist
|
||||||
|
@ -125,16 +130,82 @@ jobs:
|
||||||
gh release upload ${{ github.ref_name }} $(cat uploads.txt)
|
gh release upload ${{ github.ref_name }} $(cat uploads.txt)
|
||||||
echo "uploaded!"
|
echo "uploaded!"
|
||||||
|
|
||||||
|
# Build and packages all the platform-agnostic(ish) things
|
||||||
|
upload-global-artifacts:
|
||||||
|
needs: upload-local-artifacts
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install cargo-dist
|
||||||
|
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.2.0-prerelease.5/cargo-dist-installer.sh | sh"
|
||||||
|
# Get all the local artifacts for the global tasks to use (for e.g. checksums)
|
||||||
|
- name: Fetch local artifacts
|
||||||
|
run: |
|
||||||
|
gh release download ${{ github.ref_name }} --dir target/distrib/
|
||||||
|
- name: Run cargo-dist
|
||||||
|
# This logic is a bit janky because it's trying to be a polyglot between
|
||||||
|
# powershell and bash since this will run on windows, macos, and linux!
|
||||||
|
# The two platforms don't agree on how to talk about env vars but they
|
||||||
|
# do agree on 'cat' and '$()' so we use that to marshal values between commands.
|
||||||
|
run: |
|
||||||
|
cargo dist build --tag=${{ github.ref_name }} --output-format=json "--artifacts=global" > dist-manifest.json
|
||||||
|
echo "dist ran successfully"
|
||||||
|
cat dist-manifest.json
|
||||||
|
|
||||||
|
# Parse out what we just built and upload it to the Github Release™
|
||||||
|
jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json > uploads.txt
|
||||||
|
echo "uploading..."
|
||||||
|
cat uploads.txt
|
||||||
|
gh release upload ${{ github.ref_name }} $(cat uploads.txt)
|
||||||
|
echo "uploaded!"
|
||||||
|
|
||||||
|
upload-homebrew-formula:
|
||||||
|
needs: [create-release, upload-global-artifacts]
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
RELEASES: ${{ needs.create-release.outputs.releases }}
|
||||||
|
GITHUB_USER: "axo bot"
|
||||||
|
GITHUB_EMAIL: "admin+bot@axo.dev"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: "msfjarvis/homebrew-tap"
|
||||||
|
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
||||||
|
# So we have access to the formula
|
||||||
|
- name: Fetch local artifacts
|
||||||
|
run: |
|
||||||
|
gh release download ${{ github.ref_name }} --dir Formula --repo ${GITHUB_REPOSITORY} --clobber
|
||||||
|
- name: Commit formula files
|
||||||
|
run: |
|
||||||
|
git config --global user.name "${GITHUB_USER}"
|
||||||
|
git config --global user.email "${GITHUB_EMAIL}"
|
||||||
|
|
||||||
|
for release in $(echo "$RELEASES" | jq --compact-output '.[]'); do
|
||||||
|
name=$(echo "$release" | jq .app_name --raw-output)
|
||||||
|
version=$(echo "$release" | jq .app_version --raw-output)
|
||||||
|
|
||||||
|
git add Formula/${name}.rb
|
||||||
|
git commit -m "${name} ${version}"
|
||||||
|
done
|
||||||
|
git push
|
||||||
|
|
||||||
# Mark the Github Release™ as a non-draft now that everything has succeeded!
|
# Mark the Github Release™ as a non-draft now that everything has succeeded!
|
||||||
publish-release:
|
publish-release:
|
||||||
# Only run after all the other tasks, but it's ok if upload-artifacts was skipped
|
# Only run after all the other tasks, but it's ok if upload-artifacts was skipped
|
||||||
needs: [create-release, upload-artifacts]
|
needs: [create-release, upload-local-artifacts, upload-global-artifacts]
|
||||||
if: ${{ always() && needs.create-release.result == 'success' && (needs.upload-artifacts.result == 'skipped' || needs.upload-artifacts.result == 'success') }}
|
if: ${{ always() && needs.create-release.result == 'success' && (needs.upload-local-artifacts.result == 'skipped' || needs.upload-local-artifacts.result == 'success') && (needs.upload-global-artifacts.result == 'skipped' || needs.upload-global-artifacts.result == 'success') }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
- name: mark release as non-draft
|
- name: mark release as non-draft
|
||||||
run: |
|
run: |
|
||||||
gh release edit ${{ github.ref_name }} --draft=false
|
gh release edit ${{ github.ref_name }} --draft=false
|
||||||
|
|
17
Cargo.toml
17
Cargo.toml
|
@ -38,17 +38,14 @@ lto = "thin"
|
||||||
# Config for 'cargo dist'
|
# Config for 'cargo dist'
|
||||||
[workspace.metadata.dist]
|
[workspace.metadata.dist]
|
||||||
# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax)
|
# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax)
|
||||||
cargo-dist-version = "0.0.6"
|
cargo-dist-version = "0.2.0-prerelease.5"
|
||||||
# The preferred Rust toolchain to use in CI (rustup toolchain syntax)
|
|
||||||
rust-toolchain-version = "nightly-2023-06-10"
|
|
||||||
# CI backends to support (see 'cargo dist generate-ci')
|
# CI backends to support (see 'cargo dist generate-ci')
|
||||||
ci = ["github"]
|
ci = ["github"]
|
||||||
# The installers to generate for each app
|
# The installers to generate for each app
|
||||||
installers = ["shell", "powershell"]
|
installers = ["shell", "powershell", "homebrew"]
|
||||||
# Target platforms to build apps for (Rust target-triple syntax)
|
# Target platforms to build apps for (Rust target-triple syntax)
|
||||||
targets = [
|
targets = ["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-apple-darwin"]
|
||||||
"x86_64-unknown-linux-gnu",
|
# A GitHub repo to push Homebrew formulas to
|
||||||
"x86_64-apple-darwin",
|
tap = "msfjarvis/homebrew-tap"
|
||||||
"x86_64-pc-windows-msvc",
|
# Publish jobs to run in CI
|
||||||
"aarch64-apple-darwin",
|
publish-jobs = ["homebrew"]
|
||||||
]
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue