deploy: Build static binaries using musl libc #194
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Bootstrap and Deploy | |
on: | |
push: | |
branches: | |
- testing* | |
- github-ci* | |
jobs: | |
linux-x86_64: | |
name: Linux x86_64 | |
if: "!contains(github.event.head_commit.message, '[skip-ci]')" | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Restore local cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ./work_static-x86_64/build/.just | |
key: deploy-${{ runner.os }}-x86_64 | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Compute base commit | |
run: | | |
git fetch https://github.com/just-buildsystem/justbuild master | |
BASE_COMMIT="$(git merge-base ${GITHUB_REF_NAME} FETCH_HEAD)" | |
echo "BASE_COMMIT=${BASE_COMMIT}" >> $GITHUB_ENV | |
- name: Build tarball | |
run: | | |
.github/make-pkg/docker-build.sh ${BASE_COMMIT} static-x86_64 | |
cp ./work_static-x86_64/source/justbuild-*.tar.gz . | |
- name: Build Debian package | |
run: | | |
.github/make-pkg/docker-build.sh ${BASE_COMMIT} bundled-deb | |
cp ./work_bundled-deb/source/justbuild_*.deb . | |
- name: Build RPM package | |
run: | | |
.github/make-pkg/docker-build.sh ${BASE_COMMIT} bundled-rpm | |
cp ./work_bundled-rpm/source/rpmbuild/RPMS/x86_64/justbuild-*.rpm . | |
- name: Collect x86_64 Linux packages | |
run: | | |
tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 1970-01-01' -czvf justbuild-x86_64-linux.tar.gz *.tar.gz *.deb *.rpm | |
- name: Upload x86_64 Linux packages | |
uses: actions/upload-artifact@v3 | |
with: | |
name: justbuild-x86_64-linux | |
path: justbuild-x86_64-linux.tar.gz | |
retention-days: 1 | |
- name: Run garbage collector and clean cache | |
if: ${{ success() }} | |
run: | | |
docker run -it --rm -v $GITHUB_WORKSPACE:/workspace -w /workspace \ | |
ghcr.io/void-linux/void-musl:latest sh -c "\ | |
set -e; \ | |
xbps-install -Syu xbps; \ | |
xbps-install -Syu justbuild; \ | |
just gc --local-build-root \$(pwd)/work_static-x86_64/build/.just" | |
gh extension install actions/gh-actions-cache | |
if [ -n "$(gh actions-cache list -R ${GITHUB_REPOSITORY} -B ${GITHUB_REF} --key 'deploy-${{ runner.os }}-x86_64')" ]; then | |
gh actions-cache delete "deploy-${{ runner.os }}-x86_64" -R ${GITHUB_REPOSITORY} -B ${GITHUB_REF} --confirm | |
fi | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Store local cache | |
uses: actions/cache/save@v3 | |
if: ${{ success() }} | |
with: | |
path: ./work_static-x86_64/build/.just | |
key: deploy-${{ runner.os }}-x86_64 | |
linux-aarch64: | |
name: Linux aarch64 | |
if: "!contains(github.event.head_commit.message, '[skip-ci]')" | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Restore local cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ./work_static-aarch64/build/.just | |
key: deploy-${{ runner.os }}-aarch64 | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Compute base commit | |
run: | | |
git fetch https://github.com/just-buildsystem/justbuild master | |
BASE_COMMIT="$(git merge-base ${GITHUB_REF_NAME} FETCH_HEAD)" | |
echo "BASE_COMMIT=${BASE_COMMIT}" >> $GITHUB_ENV | |
- name: Build tarball | |
run: | | |
.github/make-pkg/docker-build.sh ${BASE_COMMIT} static-aarch64 | |
cp ./work_static-aarch64/source/justbuild-*.tar.gz . | |
- name: Collect aarch64 Linux packages | |
run: | | |
tar --sort=name --owner=root:0 --group=root:0 --mtime='UTC 1970-01-01' -czvf justbuild-aarch64-linux.tar.gz *.tar.gz | |
- name: Upload aarch64 Linux packages | |
uses: actions/upload-artifact@v3 | |
with: | |
name: justbuild-aarch64-linux | |
path: justbuild-aarch64-linux.tar.gz | |
retention-days: 1 | |
- name: Run garbage collector and clean cache | |
if: ${{ success() }} | |
run: | | |
docker run -it --rm -v $GITHUB_WORKSPACE:/workspace -w /workspace \ | |
ghcr.io/void-linux/void-musl:latest sh -c "\ | |
set -e; \ | |
xbps-install -Syu xbps; \ | |
xbps-install -Syu justbuild; \ | |
just gc --local-build-root \$(pwd)/work_static-aarch64/build/.just" | |
gh extension install actions/gh-actions-cache | |
if [ -n "$(gh actions-cache list -R ${GITHUB_REPOSITORY} -B ${GITHUB_REF} --key 'deploy-${{ runner.os }}-aarch64')" ]; then | |
gh actions-cache delete "deploy-${{ runner.os }}-aarch64" -R ${GITHUB_REPOSITORY} -B ${GITHUB_REF} --confirm | |
fi | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Store local cache | |
uses: actions/cache/save@v3 | |
if: ${{ success() }} | |
with: | |
path: ./work_static-aarch64/build/.just | |
key: deploy-${{ runner.os }}-aarch64 | |
deploy-packages: | |
name: Deploy Packages | |
if: "!contains(github.event.head_commit.message, '[skip-ci]')" | |
runs-on: ubuntu-22.04 | |
needs: [linux-x86_64, linux-aarch64] | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Retrieve x86_64 Linux packages | |
uses: actions/download-artifact@v3 | |
with: | |
name: justbuild-x86_64-linux | |
- name: Retrieve aarch64 Linux packages | |
uses: actions/download-artifact@v3 | |
with: | |
name: justbuild-aarch64-linux | |
- name: Unpack retrieved archives | |
run: | | |
tar -xzvf justbuild-x86_64-linux.tar.gz | |
rm justbuild-x86_64-linux.tar.gz | |
tar -xzvf justbuild-aarch64-linux.tar.gz | |
rm justbuild-aarch64-linux.tar.gz | |
- name: Determine release info and create checksums | |
run: | | |
VERSION="$(ls justbuild-*.tar.gz | sed 's/.*justbuild-\(.*\)-x86_64-linux.tar.gz/\1/')" | |
UNTAGGED=$([[ "$VERSION" = *+* ]] && echo true || echo false) | |
TAG_NAME="v$(echo $VERSION | tr '~+' '-')" | |
echo "UNTAGGED=${UNTAGGED}" >> $GITHUB_ENV | |
echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_ENV | |
sha256sum *.tar.gz *.deb *.rpm | tee SHA256SUMS | |
- name: Upload package checksums | |
uses: actions/upload-artifact@v3 | |
with: | |
name: SHA256SUMS | |
path: SHA256SUMS | |
if-no-files-found: error | |
- name: Upload package release | |
uses: xresloader/upload-to-github-release@v1 | |
if: startsWith(github.ref, 'refs/heads/github-ci') | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
file: "*.tar.gz;*.deb;*.rpm;SHA256SUMS" | |
tag_name: ${{ env.TAG_NAME }} | |
prerelease: ${{ env.UNTAGGED }} | |
tags: false | |
draft: false | |
overwrite: true |