Skip to content

dist

dist #26

Workflow file for this run

name: dist
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: write
jobs:
dist:
name: dist (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
target: ${{matrix.target}}
components: llvm-tools
- name: Install cargo-binutils
run: cargo install cargo-binutils
- name: Install cargo-nfpm
run: cargo install --locked cargo-nfpm
- name: Install GCC arm64 (linux)
if: startsWith(matrix.target, 'aarch64-unknown-linux')
run: sudo apt-get update && sudo apt-get install gcc-aarch64-linux-gnu
- name: Install musl (linux)
if: contains(matrix.target, 'musl')
run: sudo apt-get update && sudo apt-get install musl-tools musl-dev
- run: cargo build --target ${{ matrix.target }} --release
env:
CC: aarch64-linux-gnu-gcc
CXX: aarch64-linux-gnu-g++
LD: aarch64-linux-gnu-gcc
AR: aarch64-linux-gnu-ar
RUSTFLAGS: -Clinker=aarch64-linux-gnu-gcc
if: startsWith(matrix.target, 'aarch64-unknown-linux')
- run: cargo build --target ${{ matrix.target }} --release
if: ${{ !startsWith(matrix.target, 'aarch64-unknown-linux') }}
- name: Strip debug info
shell: bash
run: |
./extras/strip.sh target/${{ matrix.target }}/release/litemon
- name: Save signing key
run: |
python -c "import os; file = open('private-key.gpg', 'w'); file.write(os.environ['SECRET_PRIVATE_KEY']); file.close()"
shell: bash
env:
SECRET_PRIVATE_KEY : ${{ secrets.PKG_SIGNING_GPG_KEY }}
- name: Create packages
shell: bash
run: |
cargo nfpm p --target ${{ matrix.target }} --no-build -f deb
cargo nfpm p --target ${{ matrix.target }} --no-build -f rpm
mkdir -p dist-packages
cp "target/${{ matrix.target }}/release/"*.deb "dist-packages/"
cp "target/${{ matrix.target }}/release/"*.rpm "dist-packages/"
if [ -f dist-packages/litemon*_amd64.deb ]; then
mv dist-packages/litemon*_amd64.deb $(echo dist-packages/litemon*_amd64.deb | sed 's/litemon_\(.\+\)_amd64.deb/litemon-\1.x86_64.deb/g')
fi
if [ -f dist-packages/litemon*_arm64.deb ]; then
mv dist-packages/litemon*_arm64.deb $(echo dist-packages/litemon*_arm64.deb | sed 's/litemon_\(.\+\)_arm64.deb/litemon-\1.aarch64.deb/g')
fi
ls -lah dist-packages/*
if: contains(matrix.target, 'musl')
env:
NFPM_PASSPHRASE: ${{ secrets.NFPM_PASSPHRASE }}
- name: Archive
shell: bash
run: |
binary="target/${{ matrix.target }}/release/litemon"
archive="litemon-${{ matrix.target }}"
buildid=$(rust-objcopy --dump-section .note.gnu.build-id=/dev/stdout "$binary" | cat | tail -c+17 | od -An -v -tx1 | tr -d ' \n')
mkdir -p dist
mkdir -p dist-debuginfo
tar czf "dist/${archive}.tar.gz" -C target/${{ matrix.target }}/release litemon
tar czf "dist-debuginfo/${archive}-debug.tar.gz" -C target/${{ matrix.target }}/release "${buildid}.debug"
ls -lah dist/*
ls -lah dist-debuginfo/*
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
path: dist
- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}-packages
path: dist-packages
if: contains(matrix.target, 'musl')
- name: Upload debug artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}-debug
path: dist-debuginfo
- name: Release
uses: softprops/action-gh-release@v2
with:
prerelease: true
files: |
dist/litemon-${{ matrix.target }}.tar.gz
dist-debuginfo/litemon-${{ matrix.target }}-debug.tar.gz
dist-packages/*.deb
dist-packages/*.rpm
public-key.gpg
if: github.ref_type == 'tag'