mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-27 19:17:43 +00:00
maint/CICD ~ add support for DPKG generation and extra ARM-CPU build targets
This commit is contained in:
parent
38ebc14b29
commit
cc8a2be6f5
1 changed files with 69 additions and 18 deletions
87
.github/workflows/CICD.yml
vendored
87
.github/workflows/CICD.yml
vendored
|
@ -4,9 +4,8 @@ name: CICD
|
||||||
# spell-checker:ignore (env/flags) Ccodegen Coverflow RUSTFLAGS
|
# spell-checker:ignore (env/flags) Ccodegen Coverflow RUSTFLAGS
|
||||||
# spell-checker:ignore (jargon) SHAs deps softprops toolchain
|
# spell-checker:ignore (jargon) SHAs deps softprops toolchain
|
||||||
# spell-checker:ignore (names) CodeCOV MacOS MinGW Peltoche rivy
|
# spell-checker:ignore (names) CodeCOV MacOS MinGW Peltoche rivy
|
||||||
# spell-checker:ignore (shell/tools) choco clippy dmake esac fakeroot gmake grcov halium lcov libssl mkdir popd printf pushd rustc rustfmt rustup shopt xargs
|
# spell-checker:ignore (shell/tools) choco clippy dmake dpkg esac fakeroot gmake grcov halium lcov libssl mkdir popd printf pushd rustc rustfmt rustup shopt xargs
|
||||||
# spell-checker:ignore (misc) alnum coreutils gnueabihf issuecomment maint nullglob onexitbegin onexitend uutils
|
# spell-checker:ignore (misc) aarch alnum armhf coreutils gnueabihf issuecomment maint nullglob onexitbegin onexitend uutils
|
||||||
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PROJECT_NAME: coreutils
|
PROJECT_NAME: coreutils
|
||||||
|
@ -130,7 +129,10 @@ jobs:
|
||||||
job:
|
job:
|
||||||
# { os, target, cargo-options, features, use-cross, toolchain }
|
# { os, target, cargo-options, features, use-cross, toolchain }
|
||||||
- { os: ubuntu-latest , target: arm-unknown-linux-gnueabihf , features: feat_os_unix_gnueabihf , use-cross: use-cross }
|
- { os: ubuntu-latest , target: arm-unknown-linux-gnueabihf , features: feat_os_unix_gnueabihf , use-cross: use-cross }
|
||||||
|
- { os: ubuntu-latest , target: aarch64-unknown-linux-gnu , features: feat_os_unix_gnueabihf , use-cross: use-cross }
|
||||||
- { os: ubuntu-16.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
- { os: ubuntu-16.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||||
|
# - { os: ubuntu-18.04 , target: i586-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||||
|
# - { os: ubuntu-18.04 , target: i586-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||||
- { os: ubuntu-18.04 , target: i686-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
- { os: ubuntu-18.04 , target: i686-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||||
- { os: ubuntu-18.04 , target: i686-unknown-linux-musl , features: feat_os_unix_musl , use-cross: use-cross }
|
- { os: ubuntu-18.04 , target: i686-unknown-linux-musl , features: feat_os_unix_musl , use-cross: use-cross }
|
||||||
- { os: ubuntu-18.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
- { os: ubuntu-18.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||||
|
@ -148,6 +150,7 @@ jobs:
|
||||||
## install/setup prerequisites
|
## install/setup prerequisites
|
||||||
case '${{ matrix.job.target }}' in
|
case '${{ matrix.job.target }}' in
|
||||||
arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
||||||
|
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
||||||
esac
|
esac
|
||||||
- name: Initialize workflow variables
|
- name: Initialize workflow variables
|
||||||
id: vars
|
id: vars
|
||||||
|
@ -186,7 +189,14 @@ jobs:
|
||||||
echo ::set-output name=REF_TAG::${REF_TAG}
|
echo ::set-output name=REF_TAG::${REF_TAG}
|
||||||
echo ::set-output name=REF_SHAS::${REF_SHAS}
|
echo ::set-output name=REF_SHAS::${REF_SHAS}
|
||||||
# parse target
|
# parse target
|
||||||
unset TARGET_ARCH ; case '${{ matrix.job.target }}' in arm-unknown-linux-gnueabihf) TARGET_ARCH=arm ;; i686-*) TARGET_ARCH=i686 ;; x86_64-*) TARGET_ARCH=x86_64 ;; esac;
|
unset TARGET_ARCH
|
||||||
|
case '${{ matrix.job.target }}' in
|
||||||
|
aarch64-*) TARGET_ARCH=arm64 ;;
|
||||||
|
arm-*-*hf) TARGET_ARCH=armhf ;;
|
||||||
|
i586-*) TARGET_ARCH=i586 ;;
|
||||||
|
i686-*) TARGET_ARCH=i686 ;;
|
||||||
|
x86_64-*) TARGET_ARCH=x86_64 ;;
|
||||||
|
esac;
|
||||||
echo set-output name=TARGET_ARCH::${TARGET_ARCH}
|
echo set-output name=TARGET_ARCH::${TARGET_ARCH}
|
||||||
echo ::set-output name=TARGET_ARCH::${TARGET_ARCH}
|
echo ::set-output name=TARGET_ARCH::${TARGET_ARCH}
|
||||||
unset TARGET_OS ; case '${{ matrix.job.target }}' in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac;
|
unset TARGET_OS ; case '${{ matrix.job.target }}' in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac;
|
||||||
|
@ -203,9 +213,34 @@ jobs:
|
||||||
echo ::set-output name=PKG_BASENAME::${PKG_BASENAME}
|
echo ::set-output name=PKG_BASENAME::${PKG_BASENAME}
|
||||||
echo ::set-output name=PKG_NAME::${PKG_NAME}
|
echo ::set-output name=PKG_NAME::${PKG_NAME}
|
||||||
# deployable tag? (ie, leading "vM" or "M"; M == version number)
|
# deployable tag? (ie, leading "vM" or "M"; M == version number)
|
||||||
unset DEPLOYABLE ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOYABLE='true' ; fi
|
unset DEPLOY ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOY='true' ; fi
|
||||||
echo set-output name=DEPLOYABLE::${DEPLOYABLE:-<empty>/false}
|
echo set-output name=DEPLOY::${DEPLOY:-<empty>/false}
|
||||||
echo ::set-output name=DEPLOYABLE::${DEPLOYABLE}
|
echo ::set-output name=DEPLOY::${DEPLOY}
|
||||||
|
# DPKG architecture?
|
||||||
|
unset DPKG_ARCH
|
||||||
|
case ${{ matrix.job.target }} in
|
||||||
|
x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
|
||||||
|
*-linux-*) DPKG_ARCH=${TARGET_ARCH} ;;
|
||||||
|
esac
|
||||||
|
echo set-output name=DPKG_ARCH::${DPKG_ARCH}
|
||||||
|
echo ::set-output name=DPKG_ARCH::${DPKG_ARCH}
|
||||||
|
# DPKG version?
|
||||||
|
unset DPKG_VERSION ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DPKG_VERSION=${REF_TAG/#[vV]/} ; fi
|
||||||
|
echo set-output name=DPKG_VERSION::${DPKG_VERSION}
|
||||||
|
echo ::set-output name=DPKG_VERSION::${DPKG_VERSION}
|
||||||
|
# DPKG base name/conflicts?
|
||||||
|
DPKG_BASENAME=${PROJECT_NAME}
|
||||||
|
DPKG_CONFLICTS=${PROJECT_NAME}-musl
|
||||||
|
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
|
||||||
|
echo set-output name=DPKG_BASENAME::${DPKG_BASENAME}
|
||||||
|
echo set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
|
||||||
|
echo ::set-output name=DPKG_BASENAME::${DPKG_BASENAME}
|
||||||
|
echo ::set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
|
||||||
|
# DPKG name
|
||||||
|
unset DPKG_NAME;
|
||||||
|
if [[ -n $DPKG_ARCH && -n $DPKG_VERSION ]]; then DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb" ; fi
|
||||||
|
echo set-output name=DPKG_NAME::${DPKG_NAME}
|
||||||
|
echo ::set-output name=DPKG_NAME::${DPKG_NAME}
|
||||||
# target-specific options
|
# target-specific options
|
||||||
# * CARGO_FEATURES_OPTION
|
# * CARGO_FEATURES_OPTION
|
||||||
CARGO_FEATURES_OPTION='' ;
|
CARGO_FEATURES_OPTION='' ;
|
||||||
|
@ -216,18 +251,17 @@ jobs:
|
||||||
CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac;
|
CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac;
|
||||||
echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false}
|
echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false}
|
||||||
echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS}
|
echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS}
|
||||||
# # * `arm` cannot be tested on ubuntu-* hosts (b/c testing is currently primarily done via comparison of target outputs with built-in outputs and the `arm` target is not executable on the host)
|
# * test only library and/or binaries for arm-type targets
|
||||||
JOB_DO_TESTING="true"
|
unset CARGO_TEST_OPTIONS ; case '${{ matrix.job.target }}' in aarch64-* | arm-*) CARGO_TEST_OPTIONS="--bins" ;; esac;
|
||||||
case '${{ matrix.job.target }}' in arm-*) unset JOB_DO_TESTING ;; esac;
|
|
||||||
echo set-output name=JOB_DO_TESTING::${JOB_DO_TESTING:-<empty>/false}
|
|
||||||
echo ::set-output name=JOB_DO_TESTING::${JOB_DO_TESTING}
|
|
||||||
# # * test only binary for arm-type targets
|
|
||||||
unset CARGO_TEST_OPTIONS
|
|
||||||
unset CARGO_TEST_OPTIONS ; case '${{ matrix.job.target }}' in arm-*) CARGO_TEST_OPTIONS="--bin ${PROJECT_NAME}" ;; esac;
|
|
||||||
echo set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
echo set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||||
echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||||
# * strip executable?
|
# * executable for `strip`?
|
||||||
STRIP="strip" ; case '${{ matrix.job.target }}' in arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; *-pc-windows-msvc) STRIP="" ;; esac;
|
STRIP="strip"
|
||||||
|
case ${{ matrix.job.target }} in
|
||||||
|
aarch64-*-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
|
||||||
|
arm-*-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;;
|
||||||
|
*-pc-windows-msvc) STRIP="" ;;
|
||||||
|
esac;
|
||||||
echo set-output name=STRIP::${STRIP:-<empty>/false}
|
echo set-output name=STRIP::${STRIP:-<empty>/false}
|
||||||
echo ::set-output name=STRIP::${STRIP}
|
echo ::set-output name=STRIP::${STRIP}
|
||||||
- name: Create all needed build/work directories
|
- name: Create all needed build/work directories
|
||||||
|
@ -236,6 +270,7 @@ jobs:
|
||||||
## create build/work space
|
## create build/work space
|
||||||
mkdir -p '${{ steps.vars.outputs.STAGING }}'
|
mkdir -p '${{ steps.vars.outputs.STAGING }}'
|
||||||
mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}'
|
mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}'
|
||||||
|
mkdir -p '${{ steps.vars.outputs.STAGING }}/dpkg'
|
||||||
- name: rust toolchain ~ install
|
- name: rust toolchain ~ install
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
@ -307,12 +342,28 @@ jobs:
|
||||||
*) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;;
|
*) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;;
|
||||||
esac
|
esac
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
# dpkg
|
||||||
|
if [ -n "${{ steps.vars.outputs.DPKG_NAME }}" ]; then
|
||||||
|
DPKG_DIR="${{ steps.vars.outputs.STAGING }}/dpkg"
|
||||||
|
# binary
|
||||||
|
install -Dm755 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}"
|
||||||
|
if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}" ; fi
|
||||||
|
# README and LICENSE
|
||||||
|
(shopt -s nullglob; for f in [R]"EADME"{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
|
||||||
|
(shopt -s nullglob; for f in [L]"ICENSE"{-*,}{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
|
||||||
|
# control file
|
||||||
|
mkdir -p "${DPKG_DIR}/DEBIAN"
|
||||||
|
printf "Package: ${{ steps.vars.outputs.DPKG_BASENAME }}\nVersion: ${{ steps.vars.outputs.DPKG_VERSION }}\nSection: utils\nPriority: optional\nMaintainer: ${{ env.PROJECT_AUTH }}\nArchitecture: ${{ steps.vars.outputs.DPKG_ARCH }}\nProvides: ${{ env.PROJECT_NAME }}\nConflicts: ${{ steps.vars.outputs.DPKG_CONFLICTS }}\nDescription: ${{ env.PROJECT_DESC }}\n" > "${DPKG_DIR}/DEBIAN/control"
|
||||||
|
# build dpkg
|
||||||
|
fakeroot dpkg-deb --build "${DPKG_DIR}" "${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}"
|
||||||
|
fi
|
||||||
- name: Publish
|
- name: Publish
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: steps.vars.outputs.DEPLOYABLE
|
if: steps.vars.outputs.DEPLOY
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }}
|
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }}
|
||||||
|
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue