name: CICD
on:
workflow_dispatch:
pull_request:
paths-ignore:
- ".vscode"
- "*.md"
push:
branches:
- main
permissions: {}
jobs:
ci_style_check:
name: Code Style Check
runs-on: ubuntu-latest
env:
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
steps:
- name: Checkout Source
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- name: Rust Setup
run: rustup component add clippy rustfmt
- name: Cache Setup
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad with:
version: "v0.12.0"
- name: Format Check
run: cargo fmt -- --check
- name: Clippy Check
run: cargo clippy
ci_test_build:
name: Test Build
needs: ci_style_check
strategy:
fail-fast: false
matrix:
include:
- {
name: "Windows",
target: x86_64-pc-windows-msvc,
os: windows-latest,
zip: moonup-x86_64-pc-windows-msvc.zip,
}
- {
name: "Linux x86_64",
target: x86_64-unknown-linux-gnu,
os: ubuntu-latest,
zip: moonup-x86_64-unknown-linux-gnu.tar.gz,
}
- {
name: "Linux Aarch64",
target: aarch64-unknown-linux-gnu,
os: ubuntu-24.04-arm,
zip: moonup-aarch64-unknown-linux-gnu.tar.gz,
}
- {
name: "macOS ARM",
target: aarch64-apple-darwin,
os: macos-latest,
zip: moonup-aarch64-apple-darwin.tar.gz,
}
runs-on: ${{ matrix.os }}
env:
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
steps:
- name: Checkout Source
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- name: Cache Setup
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad with:
version: "v0.12.0"
- name: Tests Check
if: matrix.os != 'ubuntu-latest' || matrix.os != 'macos-15-intel'
run: cargo test
- name: Dev Build
run: cargo build --locked --target ${{ matrix.target }}
cd_release_please:
name: Release Please
needs: ci_test_build
runs-on: ubuntu-latest
if: github.repository == 'chawyehsu/moonup' && github.ref == 'refs/heads/main' && github.event_name == 'push'
permissions:
contents: write
pull-requests: write
steps:
- uses: google-github-actions/release-please-action@db8f2c60ee802b3748b512940dde88eabd7b7e01 id: release
with:
token: ${{ secrets.GITHUB_TOKEN }}
release-type: rust
release-as: 0.5.0
outputs:
release_created: ${{ steps.release.outputs.release_created }}
tag_name: ${{ steps.release.outputs.tag_name }}
cd_release_build:
name: Release Build
needs: cd_release_please
if: ${{ needs.cd_release_please.outputs.release_created == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- {
name: "Windows",
target: x86_64-pc-windows-msvc,
os: windows-latest,
zip: moonup-x86_64-pc-windows-msvc.zip,
}
- {
name: "Linux x86_64",
target: x86_64-unknown-linux-gnu,
os: ubuntu-latest,
zip: moonup-x86_64-unknown-linux-gnu.tar.gz,
}
- {
name: "Linux Aarch64",
target: aarch64-unknown-linux-gnu,
os: ubuntu-24.04-arm,
zip: moonup-aarch64-unknown-linux-gnu.tar.gz,
}
- {
name: "macOS ARM",
target: aarch64-apple-darwin,
os: macos-latest,
zip: moonup-aarch64-apple-darwin.tar.gz,
}
runs-on: ${{ matrix.os }}
continue-on-error: true
env:
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
steps:
- name: Checkout Source
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- name: Cache Setup
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad with:
version: "v0.12.0"
- name: Production Build
run: cargo build --release --locked --target ${{ matrix.target }}
- name: Strip Artifacts [Linux]
if: matrix.os == 'ubuntu-latest'
shell: bash
run: |
case ${{ matrix.target }} in
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
esac
STRIP="strip"
case ${{ matrix.target }} in
aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
esac;
"${STRIP}" target/${{ matrix.target }}/release/moonup
"${STRIP}" target/${{ matrix.target }}/release/moonup-shim
- name: Prepare Artifacts [Windows]
if: matrix.os == 'windows-latest'
run: |
cp target/${{ matrix.target }}/release/moonup.exe .
cp target/${{ matrix.target }}/release/moonup-shim.exe .
7z a ${{ matrix.zip }} moonup.exe moonup-shim.exe LICENSE README.md
- name: Prepare Artifacts [Unix]
if: matrix.os != 'windows-latest'
run: |
cp target/${{ matrix.target }}/release/moonup .
cp target/${{ matrix.target }}/release/moonup-shim .
tar czvf ${{ matrix.zip }} moonup moonup-shim LICENSE README.md
- name: Upload Artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with:
name: ${{ matrix.zip }}
path: ${{ matrix.zip }}
cd_attach_artifacts:
name: Release Artifacts
needs: [cd_release_please, cd_release_build]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download Artifacts
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
- name: Prepare Checksums
run: for file in moonup-*/moonup-*; do openssl dgst -sha256 -r "$file" | awk '{print $1}' > "${file}.sha256"; done
- name: Publish Release
run: gh release edit ${{ needs.cd_release_please.outputs.tag_name }} --draft=false --repo=chawyehsu/moonup
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Attach Artifacts
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 with:
files: moonup-*/moonup-*
tag_name: ${{ needs.cd_release_please.outputs.tag_name }}
cd_cargo_publish:
name: Publish Cargo Package
runs-on: ubuntu-latest
needs: [cd_attach_artifacts]
permissions:
id-token: write
steps:
- name: Checkout Source
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
- name: Setup crates.io Auth
id: auth
uses: rust-lang/crates-io-auth-action@b7e9a28eded4986ec6b1fa40eeee8f8f165559ec
- name: Cargo Publish
run: cargo publish --registry crates-io
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}