Build Release #565
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: Build Release | |
on: | |
schedule: | |
# every day at 6am | |
- cron: '0 6 * * *' | |
env: | |
MYSQL_BIN_NAME: "mysql-8.0.28-winx64" | |
MYSQL_BASE_PREBUILD_ADR: "https://dev.mysql.com/get/Downloads/MySQL-8.0/" | |
MYSQL_BIN_EXT: ".zip" | |
MYSQL_FINAL_SERVER_FOLDER: "mysql-server" | |
MYSQL_DEFAULT_ROOT: "cmangos" | |
CACHED_FOLDER: "${{github.workspace}}\\CachedFolder" | |
WORK_FOLDER: "${{github.workspace}}\\WorkFolder" | |
jobs: | |
build: | |
runs-on: windows-2022 | |
permissions: | |
contents: write | |
steps: | |
- name: Set Environmental Variables | |
run: | | |
echo "MYSQL_BIN_ARCH=${{env.MYSQL_BIN_NAME}}${{env.MYSQL_BIN_EXT}}" >> $env:GITHUB_ENV | |
echo "MYSQL_PREBUILD_ADR=${{env.MYSQL_BASE_PREBUILD_ADR}}${{env.MYSQL_BIN_NAME}}${{env.MYSQL_BIN_EXT}}" >> $env:GITHUB_ENV | |
$projectNames = "${{github.repository}}".Split("/")[1] | |
$expansion="${projectNames}".Split("-")[0] | |
echo "LAST_BACKUP_ADR=https://github.com/cmangos/${expansion}-db/releases/download/latest/${expansion}-all-backups.tar.gz" >> $env:GITHUB_ENV | |
echo "CORE_REPO=cmangos/mangos-${expansion}" >> $env:GITHUB_ENV | |
echo "CORE_FOLDER=${{github.workspace}}\mangos-${expansion}" >> $env:GITHUB_ENV | |
echo "DB_FOLDER=${{github.workspace}}\${expansion}-db" >> $env:GITHUB_ENV | |
echo "EXPANSION_NAME=${expansion}" >> $env:GITHUB_ENV | |
echo "PROJECT_NAME=cmangos-${expansion}" >> $env:GITHUB_ENV | |
echo "WORLD_DB_NAME=${expansion}mangos" >> $env:GITHUB_ENV | |
echo "CHAR_DB_NAME=${expansion}characters" >> $env:GITHUB_ENV | |
echo "REALM_DB_NAME=${expansion}realmd" >> $env:GITHUB_ENV | |
echo "LOGS_DB_NAME=${expansion}logs" >> $env:GITHUB_ENV | |
md -Force "${{env.CACHED_FOLDER}}" | |
md -Force "${{env.WORK_FOLDER}}" | |
- name: Checkout DB | |
uses: actions/checkout@v2 | |
with: | |
path: ${{env.DB_FOLDER}} | |
- name: Checkout CORE | |
uses: actions/checkout@v2 | |
with: | |
repository: ${{env.CORE_REPO}} | |
path: ${{env.CORE_FOLDER}} | |
- name: Cache MySQL Official .zip | |
uses: actions/cache@v2 | |
id: cache-mysqldownload | |
with: | |
path: "${{env.CACHED_FOLDER}}" | |
key: ${{ runner.os }}-${{ hashFiles('.github/workflows/build-release.yml') }} | |
- if: steps.cache-mysqldownload.outputs.cache-hit != 'true' | |
name: Download official mysql prebuild server | |
run: | | |
$MysqlArchive = Join-Path ${{env.CACHED_FOLDER}} ${{env.MYSQL_BIN_ARCH}} | |
if (-not(Test-Path -Path ${MysqlArchive} -PathType Leaf)) | |
{ | |
try | |
{ | |
(New-Object System.Net.WebClient).DownloadFile("${{env.MYSQL_PREBUILD_ADR}}", "${MysqlArchive}"); | |
} | |
catch [Net.WebException] | |
{ | |
Write-Host $_.Exception.ToString() | |
exit 1 | |
} | |
} | |
- name: Extract MySQL Archive | |
run: | | |
$MysqlArchive = Join-Path ${{env.CACHED_FOLDER}} ${{env.MYSQL_BIN_ARCH}} | |
Expand-Archive -LiteralPath "${MysqlArchive}" -DestinationPath "${{env.WORK_FOLDER}}" | Out-Null | |
Rename-Item "${{env.WORK_FOLDER}}\${{env.MYSQL_BIN_NAME}}" "${{env.WORK_FOLDER}}\${{env.MYSQL_FINAL_SERVER_FOLDER}}" | |
- name: Add Default Config Files and Batch File | |
run: | | |
$DefaultConfFile = "# For advice on how to change settings please see`n" | |
$DefaultConfFile +="# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html`n" | |
$DefaultConfFile +="`n" | |
$DefaultConfFile +="[mysqld]`n" | |
$DefaultConfFile +="`n" | |
$DefaultConfFile +="basedir = `"${{env.MYSQL_FINAL_SERVER_FOLDER}}`"`n" | |
$DefaultConfFile +="datadir = `"data`"`n" | |
$DefaultConfFile +="port = 3306`n" | |
$BatchFile ="@echo off`n" | |
$BatchFile +="COLOR F`n" | |
$BatchFile +="echo ***************************`n" | |
$BatchFile +="echo * MySQL for CMaNGOS cores *`n" | |
$BatchFile +="echo * PORT : 3306 *`n" | |
$BatchFile +="echo ***************************`n" | |
$BatchFile +="echo.`n" | |
$BatchFile +="echo MySQL for CMaNGOS is currently running.`n" | |
$BatchFile +="echo Do not close this windows before your CORE server!`n" | |
$BatchFile +="echo You can use '.server shutdown 1' on your server console for that.`n" | |
$BatchFile +="echo You can also close this windows by pressing CTRL + C.`n" | |
$BatchFile +="echo. `n" | |
$BatchFile +="echo.`n" | |
$BatchFile +="`n" | |
$BatchFile +="for /f %%i in ('dir /a /b ${{env.MYSQL_FINAL_SERVER_FOLDER}}\data') do goto notempty`n" | |
$BatchFile +="echo First run detected!`n" | |
$BatchFile +="echo Please wait while initilizing database for first use...`n" | |
$BatchFile +="${{env.MYSQL_FINAL_SERVER_FOLDER}}\bin\mysqld --defaults-file=${{env.MYSQL_FINAL_SERVER_FOLDER}}\my.ini --initialize-insecure`n" | |
$BatchFile +="echo !!! YOUR ATTENTION PLEASE !!!`n" | |
$BatchFile +="echo For your security you have to set a password for root user`n" | |
$BatchFile +="echo You can do it with the following command`n" | |
$BatchFile +="echo %CD%\${{env.MYSQL_FINAL_SERVER_FOLDER}}\bin\mysql -uroot -e `"SET PASSWORD = 'Your_Password';`"`n" | |
$BatchFile +="`n" | |
$BatchFile +="`n" | |
$BatchFile +=":notempty`n" | |
$BatchFile +="${{env.MYSQL_FINAL_SERVER_FOLDER}}\bin\mysqld --defaults-file=${{env.MYSQL_FINAL_SERVER_FOLDER}}\my.ini --standalone --console`n" | |
$BatchFile +="if errorlevel 1 goto errorstarting`n" | |
$BatchFile +="goto finish`n" | |
$BatchFile +="`n" | |
$BatchFile +=":errorstarting`n" | |
$BatchFile +="echo.`n" | |
$BatchFile +="echo ERROR: the MySQL service could not be started.`n" | |
$BatchFile +="echo Please check if no other MySQL server is running.`n" | |
$BatchFile +="pause`n" | |
$BatchFile +="exit 1`n" | |
$BatchFile +="`n" | |
$BatchFile +=":finish`n" | |
$BatchFile +="echo MySQL server is now stopped.`n" | |
$BatchFile +="pause`n" | |
$BatchFile +="exit 0`n" | |
$DefaultConfFile | Out-File -FilePath "${{env.WORK_FOLDER}}\${{env.MYSQL_FINAL_SERVER_FOLDER}}\my.ini" -Encoding ASCII | |
$BatchFile | Out-File -FilePath "${{env.WORK_FOLDER}}\start-server.bat" -Encoding ASCII | |
- name: Start MySQL Server | |
run: | | |
cd ${{env.WORK_FOLDER}} | |
$env:Path = "${{env.WORK_FOLDER}}\${{env.MYSQL_FINAL_SERVER_FOLDER}}\bin;$env:Path"; | |
Start-Process cmd.exe "/c ${{env.WORK_FOLDER}}\start-server.bat" | |
$count = 0 | |
while($true) | |
{ | |
Start-Sleep -s 5 | |
mysql -uroot --connect-timeout=2 -s -e';' | Out-Null | |
if ($LastExitCode -eq 0) | |
{ | |
Write-Host "Success" | |
mysql -uroot -e"SET PASSWORD = '${{env.MYSQL_DEFAULT_ROOT}}';" | |
if ($LastExitCode -ne 0) | |
{ | |
exit 1 | |
} | |
break | |
} | |
else | |
{ | |
if ($count -gt 30) | |
{ | |
Write-Host "Fail" | |
exit 1 | |
} | |
} | |
$count = $count + 1 | |
} | |
- name: Build ${{env.EXPANSION_NAME}} | |
run: | | |
cd "${{env.DB_FOLDER}}" | |
bash InstallFullDB.sh -InstallAll root cmangos DeleteAll | |
- name: Dumping All DBs | |
run: | | |
$env:Path = "${{env.WORK_FOLDER}}\${{env.MYSQL_FINAL_SERVER_FOLDER}}\bin;$env:Path"; | |
$finalFullDBFolder="${{github.workspace}}\sql" | |
md -Force "${finalFullDBFolder}" | Out-Null | |
echo "FINAL_SQL_FOLDER=${finalFullDBFolder}" >> $env:GITHUB_ENV | |
$env:MYSQL_PWD="${{env.MYSQL_DEFAULT_ROOT}}"; | |
mysqldump -u root ${{env.WORLD_DB_NAME}} > "${finalFullDBFolder}\${{env.WORLD_DB_NAME}}.sql"; | |
mysqldump -u root ${{env.CHAR_DB_NAME}} > "${finalFullDBFolder}\${{env.CHAR_DB_NAME}}.sql"; | |
mysqldump -u root ${{env.REALM_DB_NAME}} > "${finalFullDBFolder}\${{env.REALM_DB_NAME}}.sql"; | |
mysqldump -u root ${{env.LOGS_DB_NAME}} > "${finalFullDBFolder}\${{env.LOGS_DB_NAME}}.sql"; | |
- name: Stopping MySQL Server | |
run: | | |
Stop-Process -Name mysqld | |
Start-Sleep -s 10 | |
cd "${{github.workspace}}" | |
- name: Download sqlite3 | |
run: | | |
choco install sqlite | |
- name: Download gawk | |
run: | | |
choco install gawk | |
- name: Checkout mysql2sqlite | |
uses: actions/checkout@v2 | |
with: | |
repository: dumblob/mysql2sqlite | |
path: ${{env.CORE_FOLDER}}/mysql2sqlite | |
- name: Convert to sqlite | |
run: | | |
$finalFullDBFolder="${{github.workspace}}\sql" | |
gawk -f "${{env.CORE_FOLDER}}/mysql2sqlite/mysql2sqlite" "${finalFullDBFolder}\${{env.WORLD_DB_NAME}}.sql" | sqlite3 "${{env.FINAL_SQL_FOLDER}}\${{env.WORLD_DB_NAME}}.sqlite" | |
gawk -f "${{env.CORE_FOLDER}}/mysql2sqlite/mysql2sqlite" "${finalFullDBFolder}\${{env.CHAR_DB_NAME}}.sql" | sqlite3 "${{env.FINAL_SQL_FOLDER}}\${{env.CHAR_DB_NAME}}.sqlite" | |
gawk -f "${{env.CORE_FOLDER}}/mysql2sqlite/mysql2sqlite" "${finalFullDBFolder}\${{env.REALM_DB_NAME}}.sql" | sqlite3 "${{env.FINAL_SQL_FOLDER}}\${{env.REALM_DB_NAME}}.sqlite" | |
gawk -f "${{env.CORE_FOLDER}}/mysql2sqlite/mysql2sqlite" "${finalFullDBFolder}\${{env.LOGS_DB_NAME}}.sql" | sqlite3 "${{env.FINAL_SQL_FOLDER}}\${{env.LOGS_DB_NAME}}.sqlite" | |
- name: Preparing Assets | |
run: | | |
md -Force "${{github.workspace}}\releases" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPANSION_NAME}}-db-mysql-server.zip" "${{env.WORK_FOLDER}}" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPANSION_NAME}}-world-db.zip" "${{env.FINAL_SQL_FOLDER}}\${{env.WORLD_DB_NAME}}.sql" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPANSION_NAME}}-all-db.zip" "${{env.FINAL_SQL_FOLDER}}\*.sql" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPANSION_NAME}}-sqlite-db.zip" "${{env.FINAL_SQL_FOLDER}}\*.sqlite" | |
- name: Get Current Date | |
id: date | |
run: echo "::set-output name=date::$(date +'%Y-%m-%d')" | |
- name: Upload Snapshot | |
uses: "marvinpinto/action-automatic-releases@latest" | |
with: | |
repo_token: "${{ secrets.PUSH_RELEASE_TOKEN }}" | |
automatic_release_tag: "latest" | |
prerelease: false | |
title: "Development Build(${{ steps.date.outputs.date }})" | |
files: releases | |
notify-success: | |
name: Send Notification to Discord on Success | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: none | |
needs: | |
- build | |
steps: | |
- name: Set Environmental Variables | |
run: | | |
echo "GIT_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV | |
echo "GIT_SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV | |
projectNames="${GITHUB_REPOSITORY#*/}" | |
expansion="${projectNames%-*}" | |
echo "EXPANSION_NAME=${expansion}" >> $GITHUB_ENV | |
- name: Notify | |
uses: rjstone/discord-webhook-notify@v1.0.4 | |
with: | |
severity: info | |
description: | | |
**New ${{env.EXPANSION_NAME}}-db Prebuild Released!** | |
details: | | |
- **Branch:** `${{env.GIT_BRANCH}}` | |
- **Commit SHA:** [${{github.repository}}/${{env.GIT_SHORT_SHA}}](${{github.server_url}}/${{ github.repository }}/commit/${{github.sha}}) | |
- **Exported SQL:** [Download SQL File](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPANSION_NAME}}-all-db.zip) | |
- **Exported World SQL:** [Download SQL File](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPANSION_NAME}}-world-db.zip) | |
- **[Preconfigured MySQL Server (Windows x64 Release)](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPANSION_NAME}}-db-mysql-server.zip)** | |
You may apply the exported and world SQL files directly to their respective databases. The `root` MySQL user password is `cmangos` - **do not forget** to change that! If you find any bugs or issues please report them [here](https://github.com/cmangos/issues/issues/new/choose). | |
footer: Created by the CMaNGOS Team! | |
webhookUrl: ${{ secrets.DISCORD_WEBHOOK_RELEASE }} | |
notify-failure: | |
name: Send Notification to Discord on Failure | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: none | |
if: failure() | |
steps: | |
- name: Set Environmental Variables | |
run: | | |
echo "GIT_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV | |
echo "GIT_SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV | |
projectNames="${GITHUB_REPOSITORY#*/}" | |
expansion="${projectNames%-*}" | |
echo "EXPANSION_NAME=${expansion}" >> $GITHUB_ENV | |
- name: Notify | |
uses: rjstone/discord-webhook-notify@v1.0.4 | |
with: | |
severity: error | |
description: | | |
**${{env.EXPANSION_NAME}}-db Prebuild Failed** | |
details: | | |
- **Branch:** ${{env.GIT_BRANCH}} | |
- **Pusher:** ${{github.event.pusher.name}} | |
- **Author:** ${{github.event.head_commit.author.name}} | |
- **Commit SHA:** [${{github.repository}}/${{env.GIT_SHORT_SHA}}](${{github.server_url}}/${{ github.repository }}/commit/${{github.sha}}) | |
- **Build Log:** [actions/runs/${{github.run_id}}](${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}) | |
footer: CMaNGOS Developers Notified! | |
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} |