🚚 deploy~ #88
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: 🚚 deploy~ | |
on: | |
workflow_dispatch: | |
inputs: | |
dry_run: | |
description: 'dry run' | |
type: boolean | |
default: true | |
release_mommy: | |
description: 'create mommy release' | |
type: boolean | |
default: true | |
release_apt: | |
description: 'create apt-mommy release' | |
type: boolean | |
default: true | |
release_aur: | |
description: 'create aur-mommy release' | |
type: boolean | |
default: true | |
release_homebrew: | |
description: 'create homebrew-mommy release' | |
type: boolean | |
default: true | |
permissions: | |
contents: write | |
discussions: write | |
packages: read | |
jobs: | |
pre-flight-checks: | |
if: "!(contains(github.event.head_commit.message, '[cd skip]') || contains(github.event.head_commit.message, '[skip cd]'))" | |
runs-on: ubuntu-latest | |
outputs: | |
MOMMY_VERSION: ${{ steps.mommy_version.outputs.MOMMY_VERSION }} | |
steps: | |
- name: Print inputs | |
run: | | |
echo "dry_run: ${{ github.event.inputs.dry_run }}" | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Extract mommy's version number | |
id: mommy_version | |
run: | | |
MOMMY_VERSION="v$(head -n 1 ./version)" | |
echo "Found version '$MOMMY_VERSION'" | |
echo "MOMMY_VERSION=$MOMMY_VERSION" >> "$GITHUB_ENV" | |
echo "MOMMY_VERSION=$MOMMY_VERSION" >> "$GITHUB_OUTPUT" | |
- name: Check if corresponding section exists in changelog | |
# yes, you really do need to compare with a string, and no, using ! does not work~ | |
if: ${{ github.event.inputs.dry_run == 'false' }} | |
run: grep -qF "# [${MOMMY_VERSION#v}] --" CHANGELOG.md | |
- name: Check if release already exists | |
if: ${{ github.event.inputs.dry_run == 'false' }} | |
# using `fetch-tags` option of `actions/checkout` does not work properly~ | |
run: | | |
git fetch --prune --unshallow --tags | |
! git show-ref --tags "$MOMMY_VERSION" --quiet | |
build-linux: | |
needs: [ pre-flight-checks ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install fpm and build dependencies | |
run: | | |
sudo apt install -y rubygems libarchive-tools rpm zstd | |
sudo gem install --no-document fpm | |
- name: Build packages | |
run: make dist/generic dist/apk dist/deb dist/rpm dist/pacman | |
- name: Upload built package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-linux | |
path: dist/mommy* | |
build-macos: | |
needs: [ pre-flight-checks ] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install fpm | |
run: sudo gem install --no-document fpm | |
- name: Build package | |
run: make dist/osxpkg | |
- name: Upload built package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-macos | |
path: dist/mommy* | |
build-freebsd: | |
needs: [ pre-flight-checks ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install fpm && Build package | |
uses: vmactions/freebsd-vm@v1 | |
with: | |
usesh: true | |
prepare: | | |
set -e | |
echo "::group::Install basic packages" | |
pkg install -y git gmake | |
echo "::endgroup::" | |
# fpm | |
echo "::group::Install fpm: Actually install fpm" | |
pkg install -y devel/ruby-gems | |
gem install --no-document fpm | |
echo "::endgroup::" | |
echo "::group::Install fpm: Install gtar (workaround for https://github.com/jordansissel/fpm/pull/1922)" | |
pkg install -y gtar | |
mv /usr/bin/tar /usr/bin/bsdtar | |
mv /usr/local/bin/gtar /usr/bin/tar | |
echo "::endgroup::" | |
# /fpm | |
echo "::group::Ignore ownership issues" | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
echo "::endgroup::" | |
run: | | |
set -e | |
gmake dist/freebsd | |
- name: Upload built package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-freebsd | |
path: dist/mommy* | |
build-netbsd: | |
needs: [ pre-flight-checks ] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install fpm && Build package | |
uses: cross-platform-actions/action@v0.22.0 | |
with: | |
operating_system: netbsd | |
version: "9.3" | |
run: | | |
set -e | |
export PATH="/usr/sbin:$PATH" # Add 'pkg_*' commands to path | |
echo "::group::Install basic packages" | |
sudo pkgin -y in git gmake mozilla-rootcerts-openssl | |
echo "::endgroup::" | |
echo "::group::Ignore ownership issues" | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
echo "::endgroup::" | |
echo "::group::Build package" | |
gmake dist/netbsd | |
echo "::endgroup::" | |
- name: Upload built package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-netbsd | |
path: dist/mommy* | |
build-openbsd: | |
needs: [ pre-flight-checks ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install fpm && Build package | |
uses: vmactions/openbsd-vm@v1 | |
with: | |
usesh: true | |
prepare: | | |
set -e | |
echo "::group::Install basic packages" | |
pkg_add git gmake | |
echo "::endgroup::" | |
echo "::group::Install fpm" | |
pkg_add "$(pkg_info -Q ruby | grep "^ruby-[0-9]" | tail -n 1)" | |
/usr/local/bin/gem* install --no-document fpm | |
ln -s /usr/local/bin/fpm* /usr/local/bin/fpm # Symlink 'fpm' to latest version | |
echo "::endgroup::" | |
echo "::group::Ignore ownership issues" | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
echo "::endgroup::" | |
run: | | |
set -e | |
gmake dist/openbsd | |
- name: Upload built package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-openbsd | |
path: dist/mommy* | |
release-mommy: | |
if: ${{ github.event.inputs.release_mommy == 'true' }} | |
# `pre-flight-checks` is required to access `MOMMY_VERSION` | |
needs: [ pre-flight-checks, build-linux, build-macos, build-freebsd, build-netbsd, build-openbsd ] | |
runs-on: ubuntu-latest | |
env: | |
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download built packages | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: dist-* | |
merge-multiple: true | |
path: dist | |
- name: Extract release notes | |
id: extract-release-notes | |
uses: ffurrer2/extract-release-notes@v2 | |
with: | |
release_notes_file: RELEASE_NOTES.md | |
- name: Prepend release notes | |
run: | | |
echo -e "mommy can also be installed using a package manager. [check the readme for more info](https://github.com/FWDekker/mommy/tree/${MOMMY_VERSION}#-installation)~\n" | cat - RELEASE_NOTES.md | tee RELEASE_NOTES.md | |
- name: Publish release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ github.event.inputs.dry_run == 'false' && github.event.inputs.release_mommy == 'true' }} | |
with: | |
target_commitish: main | |
tag_name: ${{ env.MOMMY_VERSION }} | |
body_path: RELEASE_NOTES.md | |
files: mommy* | |
draft: false | |
prerelease: false | |
discussion_category_name: announcements | |
release-apt: | |
if: ${{ github.event.inputs.release_apt == 'true' }} | |
needs: [ pre-flight-checks, release-mommy ] | |
runs-on: ubuntu-latest | |
env: | |
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }} | |
steps: | |
- name: Checkout mommy | |
uses: actions/checkout@v4 | |
with: | |
path: src-mommy | |
- name: Checkout apt-mommy | |
uses: actions/checkout@v4 | |
with: | |
repository: fwdekker/apt-mommy | |
path: apt-mommy | |
ref: main | |
fetch-depth: 0 | |
# Required to push '.deb' to repository | |
token: ${{ secrets.personal_access_token }} | |
- name: Download built packages | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: dist-* | |
merge-multiple: true | |
path: dist-mommy | |
- name: Move .deb into apt-mommy | |
run: cp dist-mommy/*.deb apt-mommy/deb/ | |
- name: Import GPG key | |
run: echo "$apt_gpg_private_key" | gpg --import | |
env: | |
apt_gpg_private_key: ${{ secrets.apt_gpg_private_key }} | |
- name: Update apt-mommy | |
working-directory: apt-mommy | |
run: | | |
echo "::group::Run update script" | |
./update.sh | |
echo "::endgroup::" | |
echo "::group::Commit changes" | |
git config --global user.name "FWDekkerBot" | |
git config --global user.email "bot@fwdekker.com" | |
git add --all | |
git commit -m "🔖 mommy added package mommy $MOMMY_VERSION~" | |
echo "::endgroup::" | |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then | |
echo "::group::Push changes" | |
git push origin | |
echo "::endgroup::" | |
else | |
echo "::group::Not pushing changes" | |
echo "::endgroup::" | |
fi; | |
release-aur: | |
if: ${{ github.event.inputs.release_aur == 'true' }} | |
needs: [ pre-flight-checks, release-mommy ] | |
runs-on: ubuntu-latest | |
container: archlinux:latest | |
env: | |
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }} | |
steps: | |
- name: Set up basic system | |
run: | | |
echo "::group::Update system" | |
pacman -Syu --noconfirm | |
echo "::endgroup::" | |
echo "::group::Install basic packages" | |
pacman -S --noconfirm --needed git base-devel | |
echo "::endgroup::" | |
echo "::group::Add non-privileged user to run makepkg" | |
useradd -m build | |
echo "build ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers | |
echo "::endgroup::" | |
- name: Checkout mommy | |
uses: actions/checkout@v4 | |
with: | |
path: src-mommy | |
- name: Checkout aur-mommy | |
uses: actions/checkout@v4 | |
with: | |
repository: FWDekker/aur-mommy | |
path: aur-mommy | |
ref: master | |
fetch-depth: 0 | |
# Required to trigger CI action when pushed | |
token: ${{ secrets.personal_access_token }} | |
- name: Fix aur-mommy directory ownership | |
run: chown -R build:build ./aur-mommy/ | |
- name: Update build files | |
working-directory: aur-mommy | |
run: | | |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then | |
empty_option="" | |
else | |
empty_option="--allow-empty" | |
fi; | |
echo "::group::Fast-forward main" | |
sudo -u build git checkout dev | |
sudo -u build git checkout master | |
sudo -u build git merge --commit dev | |
echo "::endgroup::" | |
echo "::group::Update build files" | |
sudo -u build ./update.sh "$MOMMY_VERSION" | |
echo "::endgroup::" | |
echo "::group::Commit update" | |
sudo -u build git config --global user.name "FWDekkerBot" | |
sudo -u build git config --global user.email "bot@fwdekker.com" | |
sudo -u build git add --all | |
sudo -u build git commit -m "🔖 mommy updated the build files to mommy $MOMMY_VERSION~" $empty_option | |
echo "::endgroup::" | |
echo "::group::Fast-forward dev" | |
sudo -u build git checkout dev | |
sudo -u build git merge --commit master | |
echo "::endgroup::" | |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then | |
echo "::group::Push changes" | |
sudo -u build git push origin master dev | |
echo "::endgroup::" | |
else | |
echo "::group::Not pushing changes" | |
echo "::endgroup::" | |
fi; | |
release-homebrew: | |
if: ${{ github.event.inputs.release_homebrew == 'true' }} | |
needs: [ pre-flight-checks, release-mommy ] | |
runs-on: ubuntu-latest | |
env: | |
MOMMY_VERSION: ${{ needs.pre-flight-checks.outputs.MOMMY_VERSION }} | |
steps: | |
- name: Checkout mommy | |
uses: actions/checkout@v4 | |
with: | |
path: src-mommy | |
- name: Checkout homebrew-mommy | |
uses: actions/checkout@v4 | |
with: | |
repository: FWDekker/homebrew-mommy | |
path: homebrew-mommy | |
ref: main | |
fetch-depth: 0 | |
# Required to trigger CI action when pushed | |
token: ${{ secrets.personal_access_token }} | |
- name: Update formula | |
working-directory: homebrew-mommy | |
run: | | |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then | |
empty_option="" | |
else | |
empty_option="--allow-empty" | |
fi; | |
echo "::group::Fast-forward main" | |
git checkout dev | |
git checkout main | |
git merge --commit dev | |
echo "::endgroup::" | |
echo "::group::Update formula" | |
./update.sh "$MOMMY_VERSION" | |
echo "::endgroup::" | |
echo "::group::Commit update" | |
git config --global user.name "FWDekkerBot" | |
git config --global user.email "bot@fwdekker.com" | |
git add --all | |
git commit -m "🔖 mommy updated the formula to mommy $MOMMY_VERSION~" $empty_option | |
echo "::endgroup::" | |
echo "::group::Fast-forward dev" | |
git checkout dev | |
git merge --commit main | |
echo "::endgroup::" | |
if [ "${{ github.event.inputs.dry_run }}" = "false" ]; then | |
echo "::group::Push changes" | |
git push origin main dev | |
echo "::endgroup::" | |
else | |
echo "::group::Not pushing changes" | |
echo "::endgroup::" | |
fi; |