Add instance uptime to API info response #109
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: Application build | |
on: | |
push: | |
branches: [ develop, release/pre, master ] | |
paths: | |
- Application/** | |
- WebfrontCore/** | |
- Data/** | |
- SharedLibraryCore/** | |
- Plugins/** | |
- .github/workflows/build_application.yml | |
pull_request: | |
branches: [ develop ] | |
paths: | |
- Application/** | |
- WebfrontCore/** | |
- Data/** | |
- SharedLibraryCore/** | |
- Plugins/** | |
env: | |
releaseType: prerelease | |
jobs: | |
update_revision_number: | |
runs-on: ubuntu-latest | |
outputs: | |
revision_number: ${{ steps.revision.outputs.revision_number }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Restore cache | |
id: cache | |
uses: actions/cache@v4 | |
with: | |
path: cache_dir | |
key: revision-number | |
- name: Get current date | |
id: date | |
run: echo "current_date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV | |
- name: Check and update revision number | |
id: revision | |
run: | | |
FILENAME=cache_dir/revision_number.txt | |
DATEFILE=cache_dir/previous_date.txt | |
mkdir -p cache_dir | |
if [ -f "$DATEFILE" ]; then | |
prev_date=$(cat "$DATEFILE") | |
rev_number=$(cat "$FILENAME") | |
else | |
prev_date="" | |
rev_number=0 | |
fi | |
if [ "$current_date" = "$prev_date" ]; then | |
rev_number=$((rev_number + 1)) | |
else | |
rev_number=1 | |
fi | |
echo "New revision number: $rev_number" | |
echo $rev_number > "$FILENAME" | |
echo $current_date > "$DATEFILE" | |
echo "revision_number=$rev_number" >> $GITHUB_OUTPUT | |
- name: Save cache | |
uses: actions/cache@v4 | |
with: | |
path: cache_dir | |
key: revision-number | |
make_version: | |
runs-on: ubuntu-latest | |
needs: [ update_revision_number ] | |
outputs: | |
build_num: ${{ steps.generate_build_number.outputs.build_num }} | |
env: | |
revisionNumber: ${{ needs.update_revision_number.outputs.revision_number }} | |
steps: | |
- name: Make build number | |
id: generate_build_number | |
run: | | |
build_num=$(date +'%Y.%-m.%-d').${{ env.revisionNumber }} | |
echo "build_num=$build_num" >> $GITHUB_OUTPUT | |
echo "Build number is $build_num" | |
build: | |
runs-on: ubuntu-latest | |
needs: [ make_version ] | |
env: | |
solution: IW4MAdmin.sln | |
buildConfiguration: Prerelease | |
isPreRelease: false | |
buildPlatform: Any CPU | |
outputFolder: ${{ github.workspace }}/Publish/Prerelease | |
buildNumber: ${{ needs.make_version.outputs.build_num }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup .NET SDK | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Restore NuGet packages | |
run: dotnet restore ${{ env.solution }} | |
- name: Preload external resources | |
run: | | |
echo "Build Configuration is ${{ env.buildConfiguration }}, Release Type is ${{ env.releaseType }}" | |
mkdir -p WebfrontCore/wwwroot/lib/open-iconic/font/css | |
curl -o WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss https://raw.githubusercontent.com/iconic/open-iconic/master/font/css/open-iconic-bootstrap.scss | |
sed -i 's#../fonts/#/font/#g' WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss | |
- name: Build webfront | |
run: dotnet build WebfrontCore/WebfrontCore.csproj -c ${{ env.buildConfiguration }} /p:Configuration=${{ env.buildConfiguration }} /p:Platform="x64" | |
- name: Compile SCSS files | |
run: | | |
dotnet tool install Excubo.WebCompiler --global | |
webcompiler -r WebfrontCore/wwwroot/css/src -o WebfrontCore/wwwroot/css/ -m disable -z disable | |
webcompiler WebfrontCore/wwwroot/lib/open-iconic/font/css/open-iconic-bootstrap-override.scss -o WebfrontCore/wwwroot/css/ -m disable -z disable | |
- name: Bundle JS files | |
run: | | |
echo 'Getting dotnet bundle' | |
curl -o ${{ github.workspace }}/dotnet-bundle.zip https://raidmax.org/IW4MAdmin/res/dotnet-bundle.zip | |
echo 'Unzipping download' | |
unzip ${{ github.workspace }}/dotnet-bundle.zip -d ${{ github.workspace }}/bundle | |
echo 'Executing dotnet-bundle' | |
cd ${{ github.workspace }}/bundle | |
dotnet dotnet-bundle.dll clean ${{ github.workspace }}/WebfrontCore/bundleconfig.json | |
dotnet dotnet-bundle.dll ${{ github.workspace }}/WebfrontCore/bundleconfig.json | |
- name: Build plugins | |
run: | | |
cd Plugins | |
find . -name "*.csproj" -print0 | xargs -0 -I {} dotnet publish {} -c ${{ env.buildConfiguration }} -o ../BUILD/Plugins /p:Configuration=${{ env.buildConfiguration }} /p:Platform="x64" /p:DeployOnBuild=false /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:Version=${{ env.buildNumber }} --no-restore | |
- name: Build application | |
run: dotnet publish Application/Application.csproj -c ${{ env.buildConfiguration }} -o ${{ env.outputFolder }} /p:Version=${{ env.buildNumber }} /p:Configuration=${{ env.buildConfiguration }} /p:Platform="x64" --no-restore | |
- name: Download translations | |
run: | | |
mkdir -p "${{ env.outputFolder }}/Localization" | |
localizations=("en-US" "ru-RU" "es-EC" "pt-BR" "de-DE") | |
for localization in "${localizations[@]}" | |
do | |
url="https://master.iw4.zip/localization/$localization" | |
filePath="${{ env.outputFolder }}/Localization/IW4MAdmin.$localization.json" | |
curl -s "$url" -o "$filePath" | |
done | |
- name: Download geolocation database | |
run: | | |
mkdir -p ${{ env.outputFolder }}/Resources | |
wget -O ${{ env.outputFolder }}/Resources/GeoLite2-Country.mmdb https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-Country.mmdb | |
- name: Clean up publish files | |
run: | | |
chmod +x ${{ github.workspace }}/Application/BuildScripts/PostBuild.sh | |
bash ${{ github.workspace }}/Application/BuildScripts/PostBuild.sh ${{ env.outputFolder }} ${{ github.workspace }} | |
- name: Generate start scripts | |
run: | | |
cat << EOF > "${{ env.outputFolder }}/StartIW4MAdmin.cmd" | |
@echo off | |
@title IW4MAdmin | |
set DOTNET_CLI_TELEMETRY_OPTOUT=1 | |
dotnet Lib\IW4MAdmin.dll | |
pause | |
EOF | |
cat << EOF > "${{ env.outputFolder }}/StartIW4MAdmin.sh" | |
#!/bin/bash | |
export DOTNET_CLI_TELEMETRY_OPTOUT=1 | |
dotnet Lib/IW4MAdmin.dll | |
EOF | |
- name: Move extra content into publish directory | |
run: | | |
cp ${{ github.workspace }}/Plugins/ScriptPlugins/*.js ${{ env.outputFolder }}/Plugins/ | |
cp ${{ github.workspace }}/BUILD/Plugins/*.dll ${{ env.outputFolder }}/Plugins/ | |
mkdir -p ${{ env.outputFolder }}/wwwroot/css | |
cp ${{ github.workspace }}/WebfrontCore/wwwroot/css/global.min.css ${{ env.outputFolder }}/wwwroot/css/global.min.css | |
mkdir -p ${{ env.outputFolder }}/wwwroot/js | |
cp ${{ github.workspace }}/WebfrontCore/wwwroot/js/global.min.js ${{ env.outputFolder }}/wwwroot/js/global.min.js | |
mkdir -p ${{ env.outputFolder }}/wwwroot/font | |
rsync -ar ${{ github.workspace }}/WebfrontCore/wwwroot/lib/open-iconic/font/fonts/ ${{ env.outputFolder }}/wwwroot/font | |
mkdir -p ${{ env.outputFolder }}/GameFiles | |
rsync -ar ${{ github.workspace }}/GameFiles/ ${{ env.outputFolder }}/GameFiles | |
mkdir -p ${{ env.outputFolder }}/wwwroot/images/ | |
rsync -ar ${{ github.workspace }}/WebfrontCore/wwwroot/images/ ${{ env.outputFolder }}/wwwroot/images/ | |
rsync -ar ${{ github.workspace }}/BUILD/Plugins/wwwroot/ ${{ env.outputFolder }}/wwwroot/ | |
cp ${{ github.workspace }}/DeploymentFiles/UpdateIW4MAdmin.ps1 ${{ env.outputFolder }}/UpdateIW4MAdmin.ps1 | |
cp ${{ github.workspace }}/DeploymentFiles/UpdateIW4MAdmin.sh ${{ env.outputFolder }}/UpdateIW4MAdmin.sh | |
- name: Upload artifact for analysis | |
uses: actions/upload-artifact@v4 | |
with: | |
name: IW4MAdmin-${{ env.buildNumber }}-${{ env.releaseType }} | |
path: ${{ env.outputFolder }} | |
release_github: | |
runs-on: ubuntu-latest | |
needs: [ make_version, build ] | |
permissions: | |
contents: write | |
environment: prerelease | |
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/release/pre' }} | |
env: | |
buildNumber: ${{ needs.make_version.outputs.build_num }} | |
steps: | |
- name: Download build | |
uses: actions/download-artifact@v4 | |
with: | |
name: IW4MAdmin-${{ env.buildNumber }}-${{ env.releaseType }} | |
path: ${{ github.workspace }}/artifact | |
- name: Zip build | |
run: | | |
cd ${{ github.workspace }}/artifact | |
zip -r IW4MAdmin-${{ env.buildNumber }}.zip . | |
- name: Make release | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: ${{ env.buildNumber }}-${{ env.releaseType }} | |
name: IW4MAdmin ${{ env.buildNumber }} | |
draft: false | |
prerelease: true | |
body: Automated rolling release - changelog below. [Updating Instructions](https://github.com/RaidMax/IW4M-Admin/wiki/Getting-Started#updating) | |
generateReleaseNotes: true | |
artifacts: ${{ github.workspace }}/artifact/*.zip | |
artifactErrorsFailBuild: true | |
update_master_version: | |
runs-on: ubuntu-latest | |
needs: [ make_version, build, release_github ] | |
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/release/pre' }} | |
env: | |
buildNumber: ${{ needs.make_version.outputs.build_num }} | |
steps: | |
- name: Update master version | |
run: | | |
curl --header "Content-Type: application/json" \ | |
--request POST \ | |
--data '{"current-version-${{ env.releaseType }}":"${{ env.buildNumber }}","jwt-secret": "${{ secrets.JWTSecret }}"}' \ | |
http://api.raidmax.org:5000/version |