Build Release #491
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] | |
$expension="${projectNames}".Split("-")[0] | |
echo "LAST_BACKUP_ADR=https://github.com/cmangos/${expension}-db/releases/download/latest/${expension}-all-backups.tar.gz" >> $env:GITHUB_ENV | |
echo "CORE_REPO=cmangos/mangos-${expension}" >> $env:GITHUB_ENV | |
echo "CORE_FOLDER=${{github.workspace}}\mangos-${expension}" >> $env:GITHUB_ENV | |
echo "DB_FOLDER=${{github.workspace}}\${expension}-db" >> $env:GITHUB_ENV | |
echo "EXPENSION_NAME=${expension}" >> $env:GITHUB_ENV | |
echo "PROJECT_NAME=cmangos-${expension}" >> $env:GITHUB_ENV | |
echo "WORLD_DB_NAME=${expension}mangos" >> $env:GITHUB_ENV | |
echo "CHAR_DB_NAME=${expension}characters" >> $env:GITHUB_ENV | |
echo "REALM_DB_NAME=${expension}realmd" >> $env:GITHUB_ENV | |
echo "LOGS_DB_NAME=${expension}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.EXPENSION_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.EXPENSION_NAME}}-db-mysql-server.zip" "${{env.WORK_FOLDER}}" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPENSION_NAME}}-world-db.zip" "${{env.FINAL_SQL_FOLDER}}\${{env.WORLD_DB_NAME}}.sql" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPENSION_NAME}}-all-db.zip" "${{env.FINAL_SQL_FOLDER}}\*.sql" | |
7z a -tzip "${{github.workspace}}\releases\${{env.EXPENSION_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: Discord release successfully notification | |
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#*/}" | |
expension="${projectNames%-*}" | |
echo "EXPENSION_NAME=${expension}" >> $GITHUB_ENV | |
- name: Notify | |
uses: rjstone/discord-webhook-notify@v1.0.4 | |
with: | |
severity: info | |
username: ${{ github.event.repository.name }} | |
description: | | |
**${{env.EXPENSION_NAME}}-db prebuilt have just been released** | |
details: | | |
- **Branch:** ${{env.GIT_BRANCH}} | |
- **Commit:** [${{github.repository}}/${{env.GIT_SHORT_SHA}}](${{github.server_url}}/${{ github.repository }}/commit/${{github.sha}}) | |
- **All exported sql (You can directly apply them to their respective DB):** [Latest sql file](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPENSION_NAME}}-all-db.zip) | |
- **World sql (You can directly apply it to world DB):** [Latest sql file](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPENSION_NAME}}-world-db.zip) | |
- **Ready to use mysql server (root password is cmangos, dont forget to change it):** [For windows x64](${{github.server_url}}/${{ github.repository }}/releases/download/latest/${{env.EXPENSION_NAME}}-db-mysql-server.zip) | |
footer: By CMaNGOS team! | |
webhookUrl: ${{ secrets.DISCORD_WEBHOOK_RELEASE }} | |
avatarUrl: https://github.githubassets.com/images/modules/logos_page/Octocat.png | |
notify-failure: | |
name: Discord Notification 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#*/}" | |
expension="${projectNames%-*}" | |
echo "EXPENSION_NAME=${expension}" >> $GITHUB_ENV | |
- name: Notify | |
uses: rjstone/discord-webhook-notify@v1.0.4 | |
with: | |
severity: error | |
username: ${{env.EXPENSION_NAME}}-db | |
description: | | |
**${{env.EXPENSION_NAME}}-db buid failed** | |
details: | | |
- **Branch:** ${{env.GIT_BRANCH}} | |
- **Pusher:** ${{github.event.pusher.name}} | |
- **Author:** ${{github.event.head_commit.author.name}} | |
- **Commit:** [${{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 police called! | |
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} | |
avatarUrl: https://github.githubassets.com/images/modules/logos_page/Octocat.png |