Skip to content

WIP: uprev dependencies for mobilecoin core v6 #225

WIP: uprev dependencies for mobilecoin core v6

WIP: uprev dependencies for mobilecoin core v6 #225

Workflow file for this run

name: Rust
on:
push:
branches: [ main ]
tags: [ 'v*' ]
pull_request:
branches: [ main ]
env:
CARGO_TERM_COLOR: always
jobs:
# Run lints / checks
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Configure toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
target: ${{ matrix.target }}
override: true
components: rustfmt, clippy, rust-src
- name: Set RUST_TARGET_PATH
run: echo "RUST_TARGET_PATH=${GITHUB_WORKSPACE}/fw/" >> $GITHUB_ENV
- name: Install cross toolchain, libraries
run: sudo apt update && sudo apt install -y gcc-arm-none-eabi gcc-multilib libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev protobuf-compiler protobuf-c-compiler
- name: Restore core cache
uses: actions/cache/restore@v3
with:
key: core
path: |
~/.cargo
./target
- name: Run lints
run: |
make lint
# Run core library tests
test-core:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Configure toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
override: true
- name: Install protobuf tools
run: sudo apt update && sudo apt install -y libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev protobuf-compiler protobuf-c-compiler
- name: Restore core cache
uses: actions/cache/restore@v3
with:
key: core
path: |
~/.cargo
./target
- name: Run core tests
uses: actions-rs/cargo@v1
with:
command: test
args: -p ledger-mob-core -p ledger-mob-apdu
- name: Update core cache
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/cache/save@v3
with:
key: core-${{ github.run_id }}
path: |
~/.cargo
./target
# Build command line tooling
build-cli:
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
ext: .exe
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Export version tag
run: |
echo "VERSION=$(git describe --dirty=+ --always --tags)" >> $GITHUB_ENV
- name: Configure toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
target: ${{ matrix.target }}
override: true
- name: Restore ${{ matrix.target }} CLI cache
uses: actions/cache/restore@v3
with:
key: cli-${{ matrix.os }}-${{ matrix.target }}
path: |
~/.cargo
./target
- name: Install libusb (brew)
if: ${{ matrix.os == 'macos-latest' }}
run: brew install libusb
- name: Install libusb (apt native)
if: ${{ matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-gnu' }}
run: sudo apt update && sudo apt install -y libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev
- name: Cache vcpkg
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/cache@v3
with:
key: ${{ matrix.os }}-${{ matrix.target }}-vcpkg
path: $VCPKG_DIRECTORY
- name: Install libusb (vcpkg)
if: ${{ matrix.os == 'windows-latest' }}
run: |
vcpkg integrate install
vcpkg install libusb:x64-windows-static
echo "LIBUSB_DIR=$VCPKG_DIRECTORY/installed/x64-windows-static/" >> $GITHUB_ENV
- name: Build CLI
uses: actions-rs/cargo@v1
with:
command: build
args: --package ledger-mob --target ${{ matrix.target }} --release
- name: Update ${{ matrix.target }} CLI cache
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/cache/save@v3
with:
key: cli-${{ matrix.os }}-${{ matrix.target }}-${{ github.run_id }}
path: |
~/.cargo
./target
- name: Copy / Rename / Archive CLI
run: |
cp target/${{ matrix.target }}/release/ledger-mob-cli${{ matrix.ext }} ledger-mob-cli-${{ matrix.target }}-${{ env.VERSION }}${{ matrix.ext }}
tar cvf ledger-mob-cli-${{ matrix.target }}.tgz ledger-mob-cli-${{ matrix.target }}-${{ env.VERSION }}${{ matrix.ext }}
- name: Upload CLI artifacts
uses: actions/upload-artifact@v3
with:
name: ledger-mob-cli-${{ matrix.target }}
path: ledger-mob-cli-${{ matrix.target }}-${{ env.VERSION }}${{ matrix.ext }}
- name: Attach CLI artifacts to release
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ledger-mob-cli-${{ matrix.target }}.tgz
asset_name: ledger-mob-cli-${{ matrix.target }}.tgz
tag: ${{ github.ref }}
overwrite: true
# Build Firmware
build-fw:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
include:
- platform: nanox
target: thumbv6m-none-eabi
experimental: true
- platform: nanosplus
target: thumbv8m.main-none-eabi
experimental: false
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Export version tag
run: |
echo "VERSION=$(git describe --dirty=+ --always --tags)" >> $GITHUB_ENV
- name: Configure toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
target: ${{ matrix.target }}
override: true
components: rust-src
- name: Install cross toolchain
run: sudo apt update && sudo apt install gcc-arm-none-eabi gcc-multilib protobuf-compiler protobuf-c-compiler
- name: Load ${{ matrix.platform }} FW cache
uses: actions/cache/restore@v3
with:
key: fw-${{ matrix.platform }}-${{ matrix.target }}
path: |
~/.cargo
./fw/target
- name: Set RUST_TARGET_PATH
run: echo "RUST_TARGET_PATH=${GITHUB_WORKSPACE}/fw/" >> $GITHUB_ENV
- name: Force build.rs refresh (updates baked-in firmware version)
run: touch fw/build.rs
- name: Build FW
run: |
cd fw && cargo build --target ./${{ matrix.platform }}.json --release
- name: Update ${{ matrix.platform }} FW cache
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/cache/save@v3
with:
key: fw-${{ matrix.platform }}-${{ matrix.target }}-${{ github.run_id }}
path: |
~/.cargo
./fw/target
- name: Convert / Rename binary artifacts
run: |
cp fw/target/${{ matrix.platform }}/release/ledger-mob-fw ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}
arm-none-eabi-objcopy -O ihex fw/target/${{ matrix.platform }}/release/ledger-mob-fw ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}.hex
cp fw/target/${{ matrix.platform }}/release/app_${{ matrix.platform}}.json app_${{ matrix.platform }}.json
- name: Upload firmware binary artifact
uses: actions/upload-artifact@v3
with:
name: ledger-mob-fw-${{ matrix.platform }}
path: |
ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}
ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}.hex
app_${{ matrix.platform }}.json
# Build simulator tests
build-sim:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Configure toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
target: ${{ matrix.target }}
override: true
- name: Load simulator cache
uses: actions/cache/restore@v3
with:
key: sim
path: |
~/.cargo
./target
- name: Install libusb / hidapi / libudev
run: sudo apt update && sudo apt install -y libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev
- name: Build library / simulator tests
uses: actions-rs/cargo@v1
with:
command: build
args: --tests --package ledger-mob
- name: Update simulator cache
if: ${{ github.ref == 'refs/heads/main' }}
uses: actions/cache/save@v3
with:
key: sim-${{ github.run_id }}
path: |
~/.cargo
./target
# Run simulator tests
test-sim:
runs-on: ubuntu-latest
needs: [ build-sim, build-fw ]
strategy:
fail-fast: false
matrix:
include:
- platform: nanox
- platform: nanosplus
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Setup environment
run: |
echo "VERSION=$(git describe --dirty=+ --always --tags)" >> $GITHUB_ENV
echo "DRIVER_MODE=docker" >> $GITHUB_ENV
echo "MODEL=${{ matrix.platform }}" >> $GITHUB_ENV
echo "NANOAPP=$(pwd)/bin/ledger-mob-fw-${{ matrix.platform }}-$(git describe --dirty=+ --always --tags)" >> $GITHUB_ENV
- name: Configure rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
override: true
- name: Install libusb / hidapi / libudev
run: sudo apt update && sudo apt install -y libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev
- name: Restore test cache
uses: actions/cache/restore@v3
with:
key: sim
path: |
~/.cargo
./target
- name: Fetch speculos image
run: |
docker pull ghcr.io/ledgerhq/speculos:latest
- name: Fetch nextest
run: |
curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin
- name: Fetch firmware artifacts
uses: actions/download-artifact@v3
with:
name: ledger-mob-fw-${{ matrix.platform }}
path: bin
- name: Run simulator tests
uses: actions-rs/cargo@v1
with:
command: nextest
args: run --package ledger-mob
# Package firmware for distribution
package-fw:
runs-on: ubuntu-latest
needs: build-fw
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: nanox
- platform: nanosplus
steps:
- uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- uses: FranzDiebold/[email protected]
- name: Setup environment
run: |
echo "VERSION=$(git describe --dirty=+ --always --tags)" >> $GITHUB_ENV
- name: Fetch firmware artifacts
uses: actions/download-artifact@v3
with:
name: ledger-mob-fw-${{ matrix.platform }}
path: bin
- name: Setup package files
run: |
mkdir -p ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}
cp bin/ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}.hex ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}/ledger-mob-fw.hex
cp bin/app_${{ matrix.platform }}.json ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}/
cp fw/assets/mob14x14i.gif ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}/
- name: Build firmware archive
run: >
tar cvf ledger-mob-fw-${{ matrix.platform }}.tgz
ledger-mob-fw-${{ matrix.platform }}-${{ env.VERSION }}/
- name: Upload firmware package artifact
uses: actions/upload-artifact@v3
with:
name: ledger-mob-fw-${{ matrix.platform }}.tgz
path: ledger-mob-fw-${{ matrix.platform }}.tgz
- name: Attach firmware package to release
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ledger-mob-fw-${{ matrix.platform }}.tgz
asset_name: ledger-mob-fw-${{ matrix.platform }}.tgz
tag: ${{ github.ref }}
overwrite: true
docs:
runs-on: ubuntu-latest
permissions:
contents: write
pages: write
steps:
- name: Clone repository
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Fetch rust tooling
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2022-12-02
override: true
- name: Restore core cache
uses: actions/cache/restore@v3
with:
key: core
path: |
~/.cargo
./target
- name: Install libusb / libudev / protoc
run: sudo apt update && sudo apt install -y libusb-1.0-0 libusb-1.0-0-dev libudev-dev libdbus-1-dev protobuf-compiler protobuf-c-compiler
- name: Build documentation
uses: actions-rs/cargo@v1
with:
command: doc
args: --no-deps --workspace
- name: Deploy to GitHub Pages
uses: crazy-max/ghaction-github-pages@v3
if: github.ref_name == 'main'
with:
target_branch: gh-pages
build_dir: target/doc
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release:
name: Release
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
permissions:
contents: write
steps:
- name: Create Release
uses: actions/create-release@v1
id: create_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: Release ${{ github.ref }}