Skip to content

rewrote entire commit history and added initialization script #102

rewrote entire commit history and added initialization script

rewrote entire commit history and added initialization script #102

name: Build For Linux Musl x86_64
on:
push:
branches: ["main"]
workflow_dispatch:
inputs:
publish:
description: 'Publish engine'
required: true
default: 'no'
type: choice
options:
- 'no'
- 'yes'
runanyway:
description: 'Override --norun Flag'
required: true
default: 'no'
type: choice
options:
- 'no'
- 'yes'
jobs:
build:
if: (!endsWith(github.event.head_commit.message, '--norun') || inputs.runanyway == 'yes')
runs-on: ubuntu-latest
environment: general
env:
CARGO_TERM_COLOR: always
WORKSPACE: ${{ github.workspace }}
RUST_BACKTRACE: full
steps:
# Setup Build Environment
- name: 🎉 The job was automatically triggered by a ${{ github.event_name }} event.
run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- name: 🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!
run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- name: 🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.
run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
with:
lfs: true
submodules: recursive
- name: 💡 The ${{ github.repository }} repository has been cloned to the runner.
run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
# Install Dependencies
- name: Install and Cache APT Packages
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: gcc g++ # musl-tools
version: 1.0
execute_install_scripts: true
# Install Rust
- name: Make Tools Directory
run: mkdir -p ${{ github.workspace }}/tools
- name: Download Rust Installer
run: curl --proto '=https' --tlsv1.2 --silent --show-error --fail --location https://sh.rustup.rs > ${{ github.workspace }}/tools/rust.sh
- name: Make Rust Installer Executable
run: chmod +x ${{ github.workspace }}/tools/rust.sh
- name: Install Rust
run: ${{ github.workspace }}/tools/rust.sh -y
- name: Load Cargo Environment
run: source "$HOME/.cargo/env"
# Install Rust Stable Toolchains
- name: Set Rust To The Stable Toolchains
run: $HOME/.cargo/bin/rustup default stable
# Setup Rust Build Caching
- uses: Swatinem/rust-cache@v2
with:
shared-key: "linux-rust-musl-x86_64"
# Add Build Targets
- name: Add x86_64 Musl Build Target
run: $HOME/.cargo/bin/rustup target add x86_64-unknown-linux-musl
# Install Git Pre-Commit Hooks to Enforce Hooks
- name: Install Git Pre-Commit Hooks to Enforce Hooks
run: pip install pre-commit
# Check Pre-Commit Version
- name: Check Pre-Commit Version
run: pre-commit --version
# Install Pre-Commit Hooks
- name: Install Pre-Commit Hooks
run: pre-commit install
# Check Files with Pre-Commit Hooks
- name: Check Files with Pre-Commit Hooks
run: pre-commit run --all-files
# Compile Program
- name: Build Engine Server Only
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
$HOME/.cargo/bin/cargo build --verbose --target=x86_64-unknown-linux-musl --release --bin catgirl-engine --no-default-features --features server,logging-subscriber
# Display Export Directory
- name: Display Git Staging
run: |
cd ${{ github.workspace }}
git status -v -s -b
# Display Export Directory
- name: Display Export Directory
run: ls -liallh ${{ github.workspace }}/target/x86_64-unknown-linux-musl/release
# Prepare Artifact Uploads
- name: Prepare Artifact Uploads (Server)
run: |
mkdir -p ${{ github.workspace }}/upload/server # /resources
cp -a ${{ github.workspace }}/target/x86_64-unknown-linux-musl/release/catgirl-engine ${{ github.workspace }}/upload/server/catgirl-engine-server
cp -a ${{ github.workspace }}/target/binding ${{ github.workspace }}/upload/server
# cp -a ${{ github.workspace }}/resources/linux ${{ github.workspace }}/upload/server/resources
# cp -a ${{ github.workspace }}/resources/assets ${{ github.workspace }}/upload/server/resources
# Extract/Import GPG Signing Key
- name: Extract GPG Signing Key
run: |
echo "${{ secrets.GPG_SIGNING_KEY }}" > $HOME/signing.gpg
gpg --import $HOME/signing.gpg
rm -rf $HOME/signing.gpg
# Sign Files
- name: Sign Files (Server)
run: |
cd ${{ github.workspace }}/upload/server
find . -type f -not -name "checksums.sha512" -exec shasum -a 512 {} \; > checksums.sha512
gpg --sign checksums.sha512
# Remove GPG Signing Key
- name: Remove GPG Signing Key
run: rm -rf $HOME/.gnupg
# Compress Files
- name: Compress Files (Server)
run: |
export XZ_OPT=-e9
cd ${{ github.workspace }}/upload/server
tar cvJf ${{ github.workspace }}/upload/CatgirlEngine-Server-Linux-x86_64-Musl.tar.xz .
# Upload Engine
- name: Upload Engine (Release Server)
uses: actions/upload-artifact@v4
with:
name: CatgirlEngine-Server-Linux-x86_64-Musl-Tar
path: ${{ github.workspace }}/upload/CatgirlEngine-Server-Linux-x86_64-Musl.tar.xz
# List Environment
- name: List Environment
run: env
- name: List All Installed Packages
run: |
apt list --installed | wc -l
apt list --installed
- name: List All Files
run: find ${{ github.workspace }}
# Display Build Status
- name: 🍏 This job's status is ${{ job.status }}.
run: echo "🍏 This job's status is ${{ job.status }}."
deploy:
if: ${{ success() && (endsWith(github.event.head_commit.message, '--publish') || inputs.publish == 'yes') }}
needs: [Build]
runs-on: ubuntu-latest
permissions:
# See https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
# See https://docs.github.com/en/rest/overview/permissions-required-for-fine-grained-personal-access-tokens
contents: write
steps:
# Setup Build Environment
- name: 🎉 The job was automatically triggered by a ${{ github.event_name }} event.
run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- name: 🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!
run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- name: 🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.
run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
with:
lfs: true
submodules: recursive
- name: 💡 The ${{ github.repository }} repository has been cloned to the runner.
run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
# Install Dependencies
- name: Install and Cache APT Packages
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: jq # coreutils gitsome
version: 1.0
execute_install_scripts: true
# Download Engine
- name: Download Engine (Release)
uses: actions/download-artifact@v4
with:
name: CatgirlEngine-Server-Linux-x86_64-Musl-Tar
path: ${{ github.workspace }}/artifacts
# Create Tag and Github Release
- name: 👩‍💻 Create Tag and Github Release
env:
GH_TOKEN: ${{ github.token }}
run: |
# TODO: Consider checking for -alpha and -beta to filter onto other packages
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export VERSION_STRING="Catgirl Engine v$VERSION"
export BODY="Autogenerated Release From Github Actions..."
export DRAFT="false"
export PRERELEASE="false"
export LATEST="true"
export GENERATE_RELEASE_NOTES="true"
export BRANCH=`git branch --show-current --format="%s" | tr -d '\n'`
# export COMMIT=`git log -1 --oneline | cut -d' ' -f1 | tr -d '\n'`
gh api --method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/releases \
-f tag_name="v$VERSION" \
-f target_commitish="$BRANCH" \
-f name="$VERSION_STRING" \
-f body="$BODY" \
-f make_latest="$LATEST" \
-F draft="$DRAFT" \
-F prerelease="$PRERELEASE" \
-F generate_release_notes="$GENERATE_RELEASE_NOTES" || echo "Already Exists"
# Publish to Github Release (Server Only)
- name: 👩‍💻 Publish to Github Release (Server)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/CatgirlEngine-Server-Linux-x86_64-Musl.tar.xz"
export DISPLAY_LABEL="Linux Server GLibc (x86_64)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}