2024-02-29 21:44:53 -05:00
name : SPT Release Build
2024-03-12 18:38:04 -04:00
2024-02-29 21:25:58 -05:00
on :
2024-03-12 00:18:11 -04:00
schedule :
2024-03-12 01:05:53 -04:00
- cron : '* 19 * * *' # Every day at 7pm UTC (3pm ET)
2024-02-29 21:25:58 -05:00
push :
2024-03-12 18:38:04 -04:00
branches : [ trigger ]
2024-02-29 21:25:58 -05:00
jobs :
2024-03-11 23:17:50 -04:00
prepare :
2024-03-02 22:46:27 -05:00
runs-on : ubuntu-latest
2024-03-11 23:52:56 -04:00
container :
image : refringe/spt-build-node:1.0.5
2024-03-02 22:46:27 -05:00
outputs :
2024-03-11 23:17:50 -04:00
proceed : ${{ steps.check-existence.outputs.proceed }}
is_nightly : ${{ steps.determine-context.outputs.is_nightly }}
branch_server : ${{ steps.determine-context.outputs.branch_server }}
branch_modules : ${{ steps.determine-context.outputs.branch_modules }}
branch_launcher : ${{ steps.determine-context.outputs.branch_launcher }}
target_tag : ${{ steps.determine-context.outputs.target_tag }}
2024-03-11 23:50:58 -04:00
client_version : ${{ steps.versions.outputs.client_version }}
spt_version : ${{ steps.versions.outputs.spt_version }}
2024-03-02 22:46:27 -05:00
steps :
2024-03-12 00:26:35 -04:00
- name : Determine Build Context
id : determine-context
run : |
echo "Determining build context..."
if [[ "${{ github.event_name }}" == "schedule" ]]; then
echo "::set-output name=is_nightly::true"
echo "::set-output name=branch_server::3.8.0"
echo "::set-output name=branch_modules::3.8.0"
echo "::set-output name=branch_launcher::3.8.0"
else
echo "::set-output name=is_nightly::false"
echo "::set-output name=target_tag::3.8.0-BE-20240308"
fi
shell : bash
2024-03-06 16:49:34 -05:00
2024-03-12 00:26:35 -04:00
- name : Check Existence
id : check-existence
run : |
PROCEED="true"
if [[ "${{ steps.determine-context.outputs.is_nightly }}" == "true" ]]; then
declare -A BRANCHES=(
[ Server]="https://dev.sp-tarkov.com/SPT-AKI/Server.git@${{ steps.determine-context.outputs.branch_server }}"
[ Modules]="https://dev.sp-tarkov.com/SPT-AKI/Modules.git@${{ steps.determine-context.outputs.branch_modules }}"
[ Launcher]="https://dev.sp-tarkov.com/SPT-AKI/Launcher.git@${{ steps.determine-context.outputs.branch_launcher }}"
)
for REPO_NAME in "${!BRANCHES[@]}"; do
REPO_URL="${BRANCHES[$REPO_NAME]%@*}"
BRANCH="${BRANCHES[$REPO_NAME]##*@}"
echo "Checking for branch $BRANCH in $REPO_NAME..."
if ! git ls-remote --heads $REPO_URL $BRANCH | grep -q $BRANCH; then
echo "Branch $BRANCH not found in $REPO_URL"
PROCEED="false"
break
fi
done
else
TAG="${{ steps.determine-context.outputs.target_tag }}"
REPOS=("https://dev.sp-tarkov.com/SPT-AKI/Server.git" "https://dev.sp-tarkov.com/SPT-AKI/Modules.git" "https://dev.sp-tarkov.com/SPT-AKI/Launcher.git")
for REPO in "${REPOS[@]}"; do
echo "Checking for tag $TAG in $REPO..."
if ! git ls-remote --tags $REPO $TAG | grep -q $TAG; then
echo "Tag $TAG not found in $REPO"
PROCEED="false"
break
fi
done
fi
echo "::set-output name=proceed::${PROCEED}"
shell : bash
- name : Halt Workflow if Necessary
if : steps.check-existence.outputs.proceed == 'false'
run : |
echo "Required branch/tag not found in one or more repositories, halting workflow."
exit 1
shell : bash
- name : Extract Versions
id : versions
run : |
rm -rf /workspace/refringe/Build/server-core
git init /workspace/refringe/Build/server-core
cd /workspace/refringe/Build/server-core
git remote add origin https://dev.sp-tarkov.com/SPT-AKI/Server.git
git config core.sparseCheckout true
echo "project/assets/configs/core.json" >> .git/info/sparse-checkout
if [[ "${{ steps.determine-context.outputs.is_nightly }}" == "true" ]]; then
REF=${{ steps.determine-context.outputs.branch_server }}
else
REF=${{ steps.determine-context.outputs.target_tag }}
fi
2024-03-11 23:50:58 -04:00
2024-03-12 00:26:35 -04:00
# Fetch and checkout the specific reference (branch or tag)
git fetch --depth=1 origin "${REF}"
git checkout FETCH_HEAD
ls -la project/assets/configs
2024-03-11 23:50:58 -04:00
2024-03-12 00:26:35 -04:00
# Extract versions from core.json
cd project/assets/configs
SPT_VERSION=$(jq -r '.akiVersion' core.json)
FULL_VERSION=$(jq -r '.compatibleTarkovVersion' core.json)
CLIENT_VERSION=${FULL_VERSION##*.}
2024-03-11 23:50:58 -04:00
2024-03-12 00:26:35 -04:00
echo "::set-output name=client_version::${CLIENT_VERSION}"
echo "::set-output name=spt_version::${SPT_VERSION}"
shell : bash
2024-03-11 23:50:58 -04:00
2024-03-02 22:46:27 -05:00
build-server :
2024-03-11 23:17:50 -04:00
needs : [ prepare]
if : needs.prepare.outputs.proceed == 'true'
2024-02-29 21:25:58 -05:00
runs-on : ubuntu-latest
2024-03-01 11:12:38 -05:00
container :
2024-03-11 13:25:29 -04:00
image : refringe/spt-build-node:1.0.5
2024-03-06 17:19:21 -05:00
outputs :
build_type : ${{ steps.build-type.outputs.build_type }}
2024-02-29 21:25:58 -05:00
steps :
2024-03-02 14:42:07 -05:00
- name : Clone
run : |
2024-03-12 00:45:50 -04:00
rm -rf /workspace/refringe/Build/server
2024-03-11 23:17:50 -04:00
if [[ "${{ needs.prepare.outputs.is_nightly }}" == "true" ]]; then
BRANCH=${{ needs.prepare.outputs.branch_server }}
echo "Cloning branch $BRANCH"
git clone https://dev.sp-tarkov.com/SPT-AKI/Server.git --branch "$BRANCH" --depth 1 /workspace/refringe/Build/server
else
TAG=${{ needs.prepare.outputs.target_tag }}
echo "Cloning tag $TAG"
git clone https://dev.sp-tarkov.com/SPT-AKI/Server.git --branch "$TAG" --depth 1 /workspace/refringe/Build/server
fi
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-02 14:42:07 -05:00
- name : Pull LFS Files
2024-03-02 14:48:27 -05:00
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/server
2024-03-02 14:48:27 -05:00
git lfs pull && git lfs ls-files
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-02 14:42:07 -05:00
- name : Runner Debug Information
2024-03-02 13:59:49 -05:00
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/server
2024-03-02 14:38:19 -05:00
echo "Git version: $(git --version)"
echo "Git LFS version: $(git-lfs --version)"
echo "Node.js version: $(node --version)"
echo "NPM version: $(npm --version)"
echo "Latest Commit Hash: $(git rev-parse HEAD)"
echo "Associated Tags: $(git tag --contains HEAD)"
2024-03-02 14:52:00 -05:00
echo "Last Commit Message:" && git log -1 --pretty=%B
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-01 18:54:44 -05:00
2024-03-02 21:57:09 -05:00
- name : Determine Build Type
2024-03-02 15:09:22 -05:00
id : build-type
run : |
2024-03-11 23:17:50 -04:00
# Check if this is a nightly build
if [[ "${{ needs.prepare.outputs.is_nightly }}" == "true" ]]; then
# Nightly builds are always considered "bleeding"
2024-03-02 21:57:09 -05:00
BUILD_TYPE="bleeding"
2024-03-11 23:17:50 -04:00
else
cd /workspace/refringe/Build/server
# Prepare tags for check
TAGS=$(git tag --contains HEAD || echo "no-tag")
if [ -z "$TAGS" ]; then
TAGS="no-tag"
fi
TAGS="${TAGS//$'\n'/-}" # Replace newline characters with dashes
TAGS="${TAGS//,/-}" # Replace commas with dashes
# Debug build by default
# Bleeding builds have "-BE" in the tag
# Release tags follow basic semantic versioning
BUILD_TYPE="debug"
if [[ "$TAGS" =~ -BE ]]; then
BUILD_TYPE="bleeding"
elif [[ "$TAGS" =~ ^(v?\d+\.\d+\.\d+)$ ]]; then
BUILD_TYPE="release"
fi
2024-03-02 21:57:09 -05:00
fi
2024-03-06 17:19:21 -05:00
echo "::set-output name=build_type::${BUILD_TYPE}"
2024-03-02 15:09:22 -05:00
shell : bash
2024-03-02 14:07:51 -05:00
- name : Install Dependencies
2024-03-02 14:48:27 -05:00
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/server/project
2024-03-12 00:45:50 -04:00
rm -rf package-lock.json node_modules
npm cache clean --force
2024-03-02 14:48:27 -05:00
npm install
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-02 13:59:49 -05:00
2024-03-02 14:07:51 -05:00
- name : Build Server
2024-03-02 14:48:27 -05:00
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/server/project
2024-03-02 15:09:22 -05:00
BUILD_TYPE="${{ steps.build-type.outputs.build_type }}"
echo "Running build for $BUILD_TYPE"
2024-03-08 13:23:24 -05:00
npm run build:$BUILD_TYPE -- --arch=x64 --platform=win32
2024-03-04 22:17:07 -05:00
printf "\nBuilt!\n\n"
2024-03-04 22:07:07 -05:00
tree -C /workspace/refringe/Build/server/project/build
2024-03-04 22:10:27 -05:00
shell : bash
2024-03-02 13:59:49 -05:00
2024-03-09 21:00:36 -05:00
- name : Artifact Server
2024-03-09 00:04:53 -05:00
uses : actions/upload-artifact@v3
2024-03-02 15:09:22 -05:00
with :
2024-03-09 21:00:36 -05:00
name : server-artifact
2024-03-05 22:28:59 -05:00
path : /workspace/refringe/Build/server/project/build/
2024-03-08 23:58:24 -05:00
compression-level : 0
retention-days : 1
2024-03-02 15:09:22 -05:00
overwrite : true
2024-03-02 22:29:09 -05:00
2024-03-02 22:46:27 -05:00
build-modules :
2024-03-11 23:50:58 -04:00
needs : [ prepare]
2024-03-11 23:17:50 -04:00
if : needs.prepare.outputs.proceed == 'true'
2024-03-02 22:29:09 -05:00
runs-on : ubuntu-latest
container :
2024-03-08 12:21:08 -05:00
image : refringe/spt-build-dotnet:1.0.0
2024-03-02 22:29:09 -05:00
steps :
- name : Clone
run : |
2024-03-11 23:17:50 -04:00
if [[ "${{ needs.prepare.outputs.is_nightly }}" == "true" ]]; then
BRANCH=${{ needs.prepare.outputs.branch_modules }}
echo "Cloning modules from branch $BRANCH"
git clone https://dev.sp-tarkov.com/SPT-AKI/Modules.git --branch "$BRANCH" --depth 1 /workspace/refringe/Build/modules
else
TAG=${{ needs.prepare.outputs.target_tag }}
echo "Cloning modules from tag $TAG"
git clone https://dev.sp-tarkov.com/SPT-AKI/Modules.git --branch "$TAG" --depth 1 /workspace/refringe/Build/modules
2024-03-11 23:20:10 -04:00
fi
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-03 13:21:07 -05:00
2024-03-03 18:29:54 -05:00
- name : Download Client Module Package
run : |
2024-03-04 22:07:07 -05:00
DIR_MANAGED="/workspace/refringe/Build/modules/project/Shared/Managed"
2024-03-11 23:50:58 -04:00
DOWNLOAD_PATH="$DIR_MANAGED/${{ needs.prepare.outputs.client_version }}.zip"
DOWNLOAD_URL="${{ secrets.MODULE_DOMAIN }}/${{ needs.prepare.outputs.client_version }}.zip"
2024-03-03 18:29:54 -05:00
echo "Downloading Client Module Package from $DOWNLOAD_URL to $DOWNLOAD_PATH"
mkdir -p "$DIR_MANAGED"
2024-03-03 18:37:06 -05:00
wget -q -O "$DOWNLOAD_PATH" "$DOWNLOAD_URL" || {
2024-03-03 18:29:54 -05:00
echo "Failed to download the module package."
exit 1
}
if [ ! -s "$DOWNLOAD_PATH" ]; then
echo "The module package does not exist or is empty."
exit 1
fi
echo "Download Successful: $DOWNLOAD_PATH"
shell : bash
2024-03-03 18:44:40 -05:00
- name : Decompress Client Module Package
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/modules/project/Shared/Managed
2024-03-11 23:50:58 -04:00
7z x ${{ needs.prepare.outputs.client_version }}.zip -aoa
2024-03-04 21:09:03 -05:00
echo "Client module package decompressed."
2024-03-03 18:44:40 -05:00
shell : bash
- name : Delete Client Module Package
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/modules/project/Shared/Managed
2024-03-11 23:50:58 -04:00
rm -f ${{ needs.prepare.outputs.client_version }}.zip
2024-03-03 18:44:40 -05:00
echo "Client module package deleted."
shell : bash
2024-03-03 18:50:55 -05:00
- name : Build Modules
run : |
2024-03-04 22:07:07 -05:00
cd /workspace/refringe/Build/modules/project
2024-03-03 18:50:55 -05:00
dotnet build
2024-03-04 22:17:07 -05:00
printf "\nBuilt!\n\n"
2024-03-04 22:07:07 -05:00
tree /workspace/refringe/Build/modules/project/Build
2024-03-03 18:50:55 -05:00
shell : bash
2024-03-09 21:00:36 -05:00
- name : Artifact Modules
2024-03-09 00:04:53 -05:00
uses : actions/upload-artifact@v3
2024-03-04 21:12:10 -05:00
with :
2024-03-09 21:00:36 -05:00
name : modules-artifact
2024-03-05 22:28:59 -05:00
path : /workspace/refringe/Build/modules/project/Build
2024-03-08 23:58:24 -05:00
compression-level : 0
retention-days : 1
2024-03-04 21:12:10 -05:00
overwrite : true
2024-03-02 22:46:27 -05:00
build-launcher :
2024-03-11 23:50:58 -04:00
needs : [ prepare]
2024-03-11 23:17:50 -04:00
if : needs.prepare.outputs.proceed == 'true'
2024-03-02 22:29:09 -05:00
runs-on : ubuntu-latest
container :
2024-03-08 12:21:08 -05:00
image : refringe/spt-build-dotnet:1.0.0
2024-03-02 22:29:09 -05:00
steps :
- name : Clone
run : |
2024-03-11 23:17:50 -04:00
if [[ "${{ needs.prepare.outputs.is_nightly }}" == "true" ]]; then
BRANCH=${{ needs.prepare.outputs.branch_launcher }}
echo "Cloning launcher from branch $BRANCH"
git clone https://dev.sp-tarkov.com/SPT-AKI/Launcher.git --branch "$BRANCH" --depth 1 /workspace/refringe/Build/launcher
else
TAG=${{ needs.prepare.outputs.target_tag }}
echo "Cloning launcher from tag $TAG"
git clone https://dev.sp-tarkov.com/SPT-AKI/Launcher.git --branch "$TAG" --depth 1 /workspace/refringe/Build/launcher
2024-03-11 23:20:10 -04:00
fi
2024-03-11 23:58:37 -04:00
shell : bash
2024-03-04 22:24:35 -05:00
- name : Build Launcher
run : |
cd /workspace/refringe/Build/launcher/project
dotnet build
printf "\nBuilt!\n\n"
2024-03-05 11:22:44 -05:00
tree /workspace/refringe/Build/launcher/project/Build
2024-03-04 22:24:35 -05:00
shell : bash
2024-03-05 11:22:44 -05:00
2024-03-09 21:00:36 -05:00
- name : Artifact Launcher
2024-03-09 00:04:53 -05:00
uses : actions/upload-artifact@v3
2024-03-05 11:22:44 -05:00
with :
2024-03-09 21:00:36 -05:00
name : launcher-artifact
2024-03-05 22:28:59 -05:00
path : /workspace/refringe/Build/launcher/project/Build
2024-03-08 23:58:24 -05:00
compression-level : 0
retention-days : 1
2024-03-05 11:22:44 -05:00
overwrite : true
2024-03-05 23:05:43 -05:00
2024-03-06 13:19:23 -05:00
assemble-release :
2024-03-11 23:17:50 -04:00
needs : [ prepare, build-server, build-modules, build-launcher]
2024-03-05 23:05:43 -05:00
runs-on : ubuntu-latest
container :
2024-03-11 13:25:29 -04:00
image : refringe/spt-build-node:1.0.5
2024-03-09 20:49:51 -05:00
outputs :
2024-03-11 14:43:56 -04:00
base_name : ${{ steps.generate-filename.outputs.base_name }}
2024-03-09 21:15:23 -05:00
build_name : ${{ steps.generate-filename.outputs.build_name }}
2024-03-05 23:05:43 -05:00
steps :
2024-03-12 00:26:35 -04:00
- name : Clean Directory
run : |
rm -rf /workspace/refringe/Build/release /workspace/refringe/Build/build
mkdir -p /workspace/refringe/Build/release
shell : bash
- name : Download Server Artifact
uses : actions/download-artifact@v3
with :
name : server-artifact
path : /workspace/refringe/Build/release/
- name : Download Modules Artifact
uses : actions/download-artifact@v3
with :
name : modules-artifact
path : /workspace/refringe/Build/release/
- name : Download Launcher Artifact
uses : actions/download-artifact@v3
with :
name : launcher-artifact
path : /workspace/refringe/Build/release/
- name : Clone Build Project
uses : actions/checkout@v3
with :
path : /workspace/refringe/Build/build
- name : Merge Static Assets and Dynamic Files
run : cp -rvf /workspace/refringe/Build/build/static-assets/* /workspace/refringe/Build/release/
shell : bash
- name : List Release Contents
run : tree /workspace/refringe/Build/release
shell : bash
- name : Generate Release Filename
id : generate-filename
run : |
BUILD_TYPE=${{ needs.build-server.outputs.build_type }}
SPT_VERSION=${{ needs.prepare.outputs.spt_version }}
CLIENT_VERSION=${{ needs.prepare.outputs.client_version }}
DATE=$(date +%Y%m%d)
2024-03-06 22:54:43 -05:00
2024-03-12 00:26:35 -04:00
# Make BUILD_TYPE uppercase
UPPER_BUILD_TYPE=$(echo "$BUILD_TYPE" | tr '[:lower:]' '[:upper:]')
2024-03-06 23:08:46 -05:00
2024-03-12 00:26:35 -04:00
# Conditionally format the BASE_NAME based on BUILD_TYPE
if [ "$BUILD_TYPE" = "release" ]; then
BASE_NAME="SPT-${SPT_VERSION}-${CLIENT_VERSION}-${DATE}"
else
BASE_NAME="SPT-${UPPER_BUILD_TYPE}-${SPT_VERSION}-${CLIENT_VERSION}-${DATE}"
fi
echo "::set-output name=base_name::${BASE_NAME}"
echo "::set-output name=build_name::${BASE_NAME}.7z"
shell : bash
- name : Artifact Release
uses : actions/upload-artifact@v3
with :
name : release-artifact
path : /workspace/refringe/Build/release
compression-level : 0
retention-days : 1
overwrite : true
2024-03-09 21:00:36 -05:00
2024-03-09 20:49:51 -05:00
publish-release :
2024-03-11 23:17:50 -04:00
needs : [ assemble-release, build-server]
2024-03-09 20:49:51 -05:00
runs-on : ubuntu-latest
container :
2024-03-11 13:25:29 -04:00
image : refringe/spt-build-node:1.0.5
2024-03-09 20:49:51 -05:00
steps :
2024-03-12 00:26:35 -04:00
- name : Download Release Artifact
uses : actions/download-artifact@v3
with :
name : release-artifact
path : /workspace/refringe/Build/release
2024-03-09 15:00:30 -05:00
2024-03-12 00:26:35 -04:00
- name : Compress Release
run : |
cd /workspace/refringe/Build/release
7z a -mx=9 -m0=lzma2 "../${{ needs.assemble-release.outputs.build_name }}" ./*
echo "Release compressed as ${{ needs.assemble-release.outputs.build_name }}."
shell : bash
2024-03-09 14:10:59 -05:00
2024-03-12 00:26:35 -04:00
- name : Upload Release to HTTPS Source
id : upload-https-7z
run : |
cd /workspace/refringe/Build/
echo "${{ secrets.SFTP_HOST_KEY }}" > known_host
sshpass -p "${{ secrets.SFTP_PASSWORD }}" scp -v -o "Port=${{ secrets.SFTP_PORT }}" -o "ConnectTimeout=20" -o "UserKnownHostsFile=known_host" -o "StrictHostKeyChecking=yes" "/workspace/refringe/Build/${{ needs.assemble-release.outputs.build_name }}" ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }}:/public
echo "::set-output name=link_https::${{ secrets.SFTP_MIRROR_LINK }}/${{ needs.assemble-release.outputs.build_name }}"
shell : bash
- name : Create Torrent File
id : torrent_create
run : |
BASE_NAME="${{ needs.assemble-release.outputs.base_name }}"
BUILD_NAME="${{ needs.assemble-release.outputs.build_name }}"
TORRENT_NAME="${BASE_NAME}.torrent"
TORF_OUTPUT=$(/opt/venv/bin/torf --yes --out "/workspace/refringe/Build/${TORRENT_NAME}" \
--webseed "${{ steps.upload-https-7z.outputs.link_https }}" \
--tracker "http://open.acgnxtracker.com:80/announce,https://tracker.tamersunion.org:443/announce,http://tracker.renfei.net:8080/announce,udp://tracker.torrent.eu.org:451/announce,udp://ec2-18-191-163-220.us-east-2.compute.amazonaws.com:6969/announce" \
--comment "Official ${BASE_NAME} release, built by the team at sp-tarkov.com. Have fun!" \
--creator "sp-tarkov.com" \
--verbose \
"/workspace/refringe/Build/${{ needs.assemble-release.outputs.build_name }}" )
MAGNET_LINK=$(echo "${TORF_OUTPUT}" | grep -oP 'Magnet\t\K.*')
echo "::set-output name=link_magnet::${MAGNET_LINK}"
echo "::set-output name=torrent_name::${TORRENT_NAME}"
shell : bash
- name : Upload Torrent to HTTPS Source
id : upload-https-torrent
run : |
cd /workspace/refringe/Build/
echo "${{ secrets.SFTP_HOST_KEY }}" > known_host
sshpass -p "${{ secrets.SFTP_PASSWORD }}" scp -v -o "Port=${{ secrets.SFTP_PORT }}" -o "ConnectTimeout=20" -o "UserKnownHostsFile=known_host" -o "StrictHostKeyChecking=yes" "/workspace/refringe/Build/${{ steps.torrent_create.outputs.torrent_name }}" ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }}:/public
echo "::set-output name=link_torrent::${{ secrets.SFTP_MIRROR_LINK }}/${{ steps.torrent_create.outputs.torrent_name }}"
shell : bash
2024-03-08 16:24:35 -05:00
2024-03-12 00:26:35 -04:00
- name : Clean Old HTTPS Source Releases
run : |
cd /workspace/refringe/Build/
echo "${{ secrets.SFTP_HOST_KEY }}" > known_hosts
2024-03-08 16:24:35 -05:00
2024-03-12 00:26:35 -04:00
# Creating a script for sftp to execute
echo "cd /public" > sftp_commands.txt
echo "ls" >> sftp_commands.txt
2024-03-08 16:24:35 -05:00
2024-03-12 00:26:35 -04:00
# Fetch a remote list of files
FILE_LIST=$(sshpass -p "${{ secrets.SFTP_PASSWORD }}" sftp -oBatchMode=no -oPort=${{ secrets.SFTP_PORT }} -oUserKnownHostsFile=known_hosts -oStrictHostKeyChecking=yes -b sftp_commands.txt ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }})
2024-03-06 23:41:39 -05:00
2024-03-12 00:26:35 -04:00
echo "Files listed:"
echo "$FILE_LIST"
2024-03-08 16:01:00 -05:00
2024-03-12 00:26:35 -04:00
# Filtering and processing the file list
echo "$FILE_LIST" | tr ' ' '\n' | grep -E 'SPT-(DEBUG|BLEEDING).*\.(7z|torrent)$' | while read filename; do
echo "Processing file: $filename"
2024-03-08 16:01:00 -05:00
# Extract date from filename
2024-03-12 00:26:35 -04:00
if [[ "$filename" =~ ([0-9]{8})\.(7z|torrent)$ ]]; then
2024-03-08 16:01:00 -05:00
file_date="${BASH_REMATCH[1]}"
file_date_fmt=$(date -d "${file_date:0:4}-${file_date:4:2}-${file_date:6:2}" +%s)
current_date=$(date +%s)
limit_date=$(date -d "@$((current_date - 30 * 24 * 3600))" +%s)
if [[ "$file_date_fmt" -lt "$limit_date" ]]; then
2024-03-12 00:26:35 -04:00
echo "Marked for deletion: $filename"
echo "rm \"/public/$filename\"" >> delete_commands.txt
2024-03-08 16:01:00 -05:00
fi
fi
2024-03-12 00:26:35 -04:00
done
# Check if there are files to delete and execute
if [ -s delete_commands.txt ]; then
echo "Running deletion task..."
sshpass -p "${{ secrets.SFTP_PASSWORD }}" sftp -oBatchMode=no -oPort=${{ secrets.SFTP_PORT }} -oUserKnownHostsFile=known_hosts -oStrictHostKeyChecking=yes -b delete_commands.txt ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }}
else
echo "No old files to delete."
fi
shell : bash
- name : Upload Release to Mega
id : upload-mega
run : |
mega-https on
mega-login "${{ secrets.MEGA_EMAIL }}" "${{ secrets.MEGA_PASSWORD }}"
2024-03-08 16:24:35 -05:00
2024-03-12 00:26:35 -04:00
mega-put -c "/workspace/refringe/Build/${{ needs.assemble-release.outputs.build_name }}" "/spt-release/${{ needs.assemble-release.outputs.build_name }}"
# Generate link and save it.
EXPORT_OUTPUT=$(mega-export -a "/spt-release/${{ needs.assemble-release.outputs.build_name }}" -f)
LINK_MEGA=$(echo "$EXPORT_OUTPUT" | grep -o 'https://mega.nz/file/[A-Za-z0-9#_\-]*')
echo "::set-output name=link_mega::${LINK_MEGA}"
mega-logout
shell : bash
- name : Clean Old Mega Releases
run : |
mega-https on
mega-login "${{ secrets.MEGA_EMAIL }}" "${{ secrets.MEGA_PASSWORD }}"
# List files and filter out old DEBUG or BLEEDING files
mega-ls /spt-release | grep -E 'SPT-(DEBUG|BLEEDING).*\.7z$' | while read -r filename; do
# Extract date from filename
if [[ "$filename" =~ ([0-9]{8})\.7z$ ]]; then
file_date="${BASH_REMATCH[1]}"
file_date_fmt=$(date -d "${file_date:0:4}-${file_date:4:2}-${file_date:6:2}" +%s)
# Get current date minus 30 days
current_date=$(date +%s)
limit_date=$(date -d "@$((current_date - 30 * 24 * 3600))" +%s)
# Compare dates and delete old files
if [[ "$file_date_fmt" -lt "$limit_date" ]]; then
echo "Deleting old file: $filename"
mega-rm "/spt-release/$filename"
fi
2024-03-11 11:22:01 -04:00
fi
2024-03-12 00:26:35 -04:00
done
# Remove old file versions to save space.
mega-deleteversions -f /spt-release/*
mega-logout
shell : bash
- name : Post Build Info to Discord
env :
DISCORD_WEBHOOK_URL : ${{ secrets.DISCORD_WEBHOOK_URL }}
BUILD_TYPE : ${{ needs.build-server.outputs.build_type }}
BASE_NAME : ${{ needs.assemble-release.outputs.base_name }}
BUILD_NAME : ${{ needs.assemble-release.outputs.build_name }}
LINK_MEGA : ${{ steps.upload-mega.outputs.link_mega }}
LINK_HTTPS : ${{ steps.upload-https-7z.outputs.link_https }}
LINK_TORRENT : ${{ steps.upload-https-torrent.outputs.link_torrent }}
run : |
cd /workspace/refringe/Build/
FOOTER_MESSAGES=("You look great today!" "Powered by coffee" "Did you remember to hydrate today?" "Have you tried turning it off and on again?" "In Chomp we trust" "Beep boop, I'm a bot" "Keep calm and commit your code" "May the source be with you" "Go to bed, Terk" "Please direct all support requests to Drakia" "Meaw")
FOOTER_MESSAGE="${FOOTER_MESSAGES[$RANDOM % ${#FOOTER_MESSAGES[@]}]}"
TIMESTAMP=$(date --iso-8601=seconds)
FILE_SIZE_MB=$(stat -c %s "$BUILD_NAME" | awk '{printf "%.2f MB", $1 / 1024 / 1024}')
FILE_HASH=$(sha256sum "$BUILD_NAME" | awk '{print $1}')
if [ "$BUILD_TYPE" == "bleeding" ]; then
EMBED_COLOR=14423100
EMBED_TITLE="A New BLEEDING Build Released"
EMBED_DESCRIPTION=$'A new bleeding build is now available for download. Mods are disabled for bleeding builds. 7-Zip is *required* to extract the release.'
elif [ "$BUILD_TYPE" == "debug" ]; then
EMBED_COLOR=5789784
EMBED_TITLE="New DEBUG Build Available"
EMBED_DESCRIPTION=$'A new debug build is now available for download. Mods are disabled for debug builds. 7-Zip is *required* to extract the release.'
else
EMBED_COLOR=1374720
EMBED_TITLE="Release Build Now Available"
EMBED_DESCRIPTION=$'A new stable release build is now ready for download. 7-Zip is *required* to extract the release.'
fi
EMBED_DESCRIPTION+=$'\n\n**Build Information:** 📊\nName : *'"${BASE_NAME}"$'*\nFile Size : *'"${FILE_SIZE_MB}"$'*\nSHA-256 Hash : *'"${FILE_HASH}"$'*\n\n**Primary Download Link:** 🚀\n'"${LINK_MEGA}"$'\n\n**Torrent Link:** 🔗\n'"${LINK_TORRENT}"$'\n\nIn order to conserve bandwidth, please consider using the *above* methods to download the release. If you have issues using those methods, you are free to download using any of the following HTTP mirrors.\n\nWhile the links *below* are not secret, **do not advertise them**. The primary MEGA link or torrent should be used to advertise any downloads.\n\n**Mirrors:** 🌐\n'"${LINK_HTTPS}"
jq -n \
--arg EMBED_TITLE "$EMBED_TITLE" \
--arg EMBED_DESCRIPTION "$EMBED_DESCRIPTION" \
--arg LINK_MEGA "$LINK_MEGA" \
--argjson EMBED_COLOR $EMBED_COLOR \
--arg FOOTER_MESSAGE "$FOOTER_MESSAGE" \
--arg TIMESTAMP "$TIMESTAMP" \
'{
"username": "BuildBot" ,
"avatar_url": "https://i.imgur.com/28JJJec.png" ,
"content": "✨ **New Build Available!** ✨" ,
"embeds": [
{
"title": $EMBED_TITLE,
"description": $EMBED_DESCRIPTION,
"url": $LINK_MEGA,
"color": $EMBED_COLOR,
"footer": {
"text": $FOOTER_MESSAGE
},
"timestamp": $TIMESTAMP
}
]
}' > payload_discord.json
echo "Payload Generated:"
cat payload_discord.json
echo "Sending Payload..."
curl -H "Content-Type: application/json" \
-X POST \
--data-binary @payload_discord.json \
$DISCORD_WEBHOOK_URL
shell : bash