mirror of
https://github.com/ClementTsang/bottom
synced 2024-11-26 22:20:18 +00:00
3c51245d35
Disables an unnecessary use of cross for i686 Windows, and add multilib for i686 Linux since apparently that's needed now.
381 lines
11 KiB
YAML
381 lines
11 KiB
YAML
# Creates nightly deployment builds for main targets. Note this does not cover package distribution channels,
|
|
# such as choco.
|
|
|
|
name: nightly
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 0 * * *"
|
|
workflow_dispatch:
|
|
inputs:
|
|
isMock:
|
|
description: "Replace to trigger a non-mock run."
|
|
default: "mock"
|
|
required: false
|
|
|
|
jobs:
|
|
initialize-job:
|
|
name: initialize-job
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check if mock
|
|
run: |
|
|
echo "${{ github.event.inputs.isMock }}";
|
|
if [[ -z "${{ github.event.inputs.isMock }}" ]]; then
|
|
echo "This is a scheduled nightly run."
|
|
elif [[ "${{ github.event.inputs.isMock }}" == "mock" ]]; then
|
|
echo "This is a mock run."
|
|
else
|
|
echo "This is NOT a mock run. Watch for the generated files!"
|
|
fi
|
|
|
|
- name: Save version number to artifact
|
|
run: echo "nightly" > release-version
|
|
|
|
- name: Upload release-version as artifact
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
retention-days: 1
|
|
name: release-version
|
|
path: release-version
|
|
|
|
build-release:
|
|
name: build-release
|
|
needs: [initialize-job]
|
|
runs-on: ${{ matrix.triple.os }}
|
|
container: ${{ matrix.triple.container }}
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
triple:
|
|
# Standard x86-64 stuff, stable
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "x86_64-unknown-linux-gnu",
|
|
cross: false,
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "x86_64-unknown-linux-gnu",
|
|
cross: false,
|
|
container: quay.io/pypa/manylinux2014_x86_64,
|
|
suffix: "2-17",
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "i686-unknown-linux-gnu",
|
|
cross: false,
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "x86_64-unknown-linux-musl",
|
|
cross: false,
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "i686-unknown-linux-musl",
|
|
cross: true,
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "macOS-latest",
|
|
target: "x86_64-apple-darwin",
|
|
cross: false,
|
|
strip: true,
|
|
}
|
|
- {
|
|
os: "windows-2019",
|
|
target: "x86_64-pc-windows-msvc",
|
|
cross: false,
|
|
}
|
|
- { os: "windows-2019", target: "i686-pc-windows-msvc", cross: false }
|
|
- {
|
|
os: "windows-2019",
|
|
target: "x86_64-pc-windows-gnu",
|
|
cross: false,
|
|
}
|
|
|
|
# aarch64
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "aarch64-unknown-linux-gnu",
|
|
cross: true,
|
|
}
|
|
|
|
# armv7
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "armv7-unknown-linux-gnueabihf",
|
|
cross: true,
|
|
}
|
|
|
|
# PowerPC 64 LE
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "powerpc64le-unknown-linux-gnu",
|
|
cross: true,
|
|
}
|
|
|
|
# Risc-V 64gc
|
|
- {
|
|
os: "ubuntu-18.04",
|
|
target: "riscv64gc-unknown-linux-gnu",
|
|
cross: true,
|
|
}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Install toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
target: ${{ matrix.triple.target }}
|
|
|
|
- name: Install gcc-multilib for (Linux i686)
|
|
if: matrix.triple.target == 'i686-unknown-linux-gnu' || matrix.triple.target == 'i686-unknown-linux-musl'
|
|
run: |
|
|
sudo dpkg --add-architecture i386
|
|
sudo apt update
|
|
sudo apt install gcc-multilib -y
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: ${{ matrix.triple.target }}
|
|
|
|
- name: Build
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: build
|
|
args: --release --verbose --target=${{ matrix.triple.target }} --features "battery"
|
|
use-cross: ${{ matrix.triple.cross }}
|
|
|
|
- name: Move autocomplete to working directory
|
|
shell: bash
|
|
run: |
|
|
mkdir completion
|
|
cp -r ./target/${{ matrix.triple.target }}/release/build/bottom-*/out/. completion
|
|
|
|
- name: Strip release binary (macOS or Linux x86-64/i686)
|
|
if: matrix.triple.strip == true
|
|
run: |
|
|
strip target/${{ matrix.triple.target }}/release/btm
|
|
|
|
# TODO: Strip ARM
|
|
|
|
- name: Bundle release and completion (Windows)
|
|
if: matrix.triple.os == 'windows-2019'
|
|
shell: bash
|
|
run: |
|
|
cp target/${{ matrix.triple.target }}/release/btm.exe btm.exe
|
|
7z a bottom_${{ matrix.triple.target }}.zip "btm.exe"
|
|
7z a bottom_${{ matrix.triple.target }}.zip "completion"
|
|
echo "ASSET=bottom_${{ matrix.triple.target }}.zip" >> $GITHUB_ENV
|
|
|
|
- name: Bundle release and completion (Linux and macOS)
|
|
if: matrix.triple.os != 'windows-2019'
|
|
shell: bash
|
|
run: |
|
|
cp target/${{ matrix.triple.target }}/release/btm ./btm
|
|
tar -czvf bottom_${{ matrix.triple.target }}${{ matrix.triple.suffix }}.tar.gz btm completion
|
|
echo "ASSET=bottom_${{ matrix.triple.target }}${{ matrix.triple.suffix }}.tar.gz" >> $GITHUB_ENV
|
|
|
|
- name: Create release directory for artifact, move file
|
|
shell: bash
|
|
run: |
|
|
mkdir release
|
|
mv ${{ env.ASSET }} release
|
|
|
|
- name: Compress completion files (Linux x86-64 GNU)
|
|
if: matrix.triple.target == 'x86_64-unknown-linux-gnu' && matrix.triple.container == ''
|
|
shell: bash
|
|
run: |
|
|
tar -C ./completion -czvf completion.tar.gz .
|
|
mv completion.tar.gz release
|
|
|
|
- name: Save release files as artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
retention-days: 1
|
|
name: release
|
|
path: release
|
|
|
|
build-msi:
|
|
name: build-msi
|
|
needs: [initialize-job]
|
|
runs-on: "windows-2019"
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Get release download URL
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release-version
|
|
path: release-version
|
|
|
|
- name: Set release version
|
|
shell: bash
|
|
run: |
|
|
release_version="$(cat ./release-version/release-version)"
|
|
echo "RELEASE_VERSION=$release_version" >> $GITHUB_ENV
|
|
|
|
- name: Validate release environment variables
|
|
run: |
|
|
echo "Release version: ${{ env.RELEASE_VERSION }}"
|
|
|
|
- name: Install Net-Framework-Core
|
|
shell: powershell
|
|
run: Install-WindowsFeature Net-Framework-Core
|
|
|
|
- name: Install wixtoolset
|
|
uses: crazy-max/ghaction-chocolatey@v1.4.0
|
|
with:
|
|
args: install -y wixtoolset
|
|
|
|
- name: Install toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
target: x86_64-pc-windows-msvc
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: x86_64-pc-windows-msvc-msi
|
|
|
|
- name: Build msi file
|
|
shell: powershell
|
|
run: |
|
|
cargo install cargo-wix --version 0.3.1 --locked
|
|
cargo wix init
|
|
cargo wix
|
|
|
|
- name: Create release directory for artifact, move file
|
|
shell: bash
|
|
run: |
|
|
mkdir release
|
|
mv bottom_x86_64_installer.msi release
|
|
|
|
- name: Save msi file as artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
retention-days: 1
|
|
name: release
|
|
path: release
|
|
|
|
build-deb:
|
|
name: build-deb
|
|
needs: [initialize-job]
|
|
runs-on: "ubuntu-18.04"
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Get release download URL
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release-version
|
|
path: release-version
|
|
|
|
- name: Set release upload URL and release version
|
|
shell: bash
|
|
run: |
|
|
release_version="$(cat ./release-version/release-version)"
|
|
echo "RELEASE_VERSION=$release_version" >> $GITHUB_ENV
|
|
|
|
- name: Validate release environment variables
|
|
run: |
|
|
echo "Release version: ${{ env.RELEASE_VERSION }}"
|
|
|
|
- name: Install toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
target: x86_64-unknown-linux-gnu
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
with:
|
|
key: x86_64-unknown-linux-gnu-deb
|
|
|
|
- name: Build Debian release
|
|
run: |
|
|
cargo install cargo-deb --version 1.29.0 --locked
|
|
cargo deb
|
|
cp ./target/debian/bottom_*.deb ./bottom_${{ env.RELEASE_VERSION }}_amd64.deb
|
|
|
|
- name: Create release directory for artifact, move file
|
|
shell: bash
|
|
run: |
|
|
mkdir release
|
|
mv bottom_${{ env.RELEASE_VERSION }}_amd64.deb release
|
|
|
|
- name: Save Debian file as artifacts
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
retention-days: 1
|
|
name: release
|
|
path: release
|
|
|
|
upload-release:
|
|
name: upload-release
|
|
runs-on: ubuntu-latest
|
|
needs: [build-release, build-deb, build-msi]
|
|
steps:
|
|
- name: Get release artifacts
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release
|
|
path: release
|
|
|
|
- name: Print out all release files
|
|
run: |
|
|
echo "Generated $(ls ./release | wc -l) files:"
|
|
ls ./release
|
|
|
|
- name: Delete tag and release
|
|
uses: dev-drprasad/delete-tag-and-release@v0.1.3
|
|
if: github.event.inputs.isMock != 'mock'
|
|
with:
|
|
delete_release: true
|
|
tag_name: nightly
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Sleep for a few seconds to prevent timing issues between the deletion and creation of the release
|
|
run: sleep 10
|
|
if: github.event.inputs.isMock != 'mock'
|
|
|
|
- name: Upload all saved release files if not mock
|
|
uses: softprops/action-gh-release@v1
|
|
if: github.event.inputs.isMock != 'mock'
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
prerelease: true
|
|
tag_name: "nightly"
|
|
draft: false
|
|
fail_on_unmatched_files: true
|
|
files: |
|
|
./release/*
|