mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-06 11:57:10 +00:00
GitHub Actions: automatically build and upload release artifacts, and auto-update update.pmmp.io (#4376)
This commit is contained in:
parent
5a970541f9
commit
7bd8d09023
113
.github/workflows/draft-release.yml
vendored
Normal file
113
.github/workflows/draft-release.yml
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
name: Draft release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags: "*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
draft:
|
||||||
|
name: Create GitHub draft release
|
||||||
|
if: "startsWith(github.event.head_commit.message, 'Release ')"
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@2.12.0
|
||||||
|
with:
|
||||||
|
php-version: 8.0
|
||||||
|
|
||||||
|
- name: Restore Composer package cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cache/composer/files
|
||||||
|
~/.cache/composer/vcs
|
||||||
|
key: "composer-v2-cache-${{ hashFiles('./composer.lock') }}"
|
||||||
|
restore-keys: |
|
||||||
|
composer-v2-cache-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-dev --prefer-dist --no-interaction --ignore-platform-reqs
|
||||||
|
|
||||||
|
- name: Patch VersionInfo
|
||||||
|
run: |
|
||||||
|
BUILD_NUMBER=2000+$GITHUB_RUN_NUMBER #to stay above jenkins
|
||||||
|
echo "Build number: $BUILD_NUMBER"
|
||||||
|
sed -i "s/const BUILD_NUMBER = 0/const BUILD_NUMBER = ${BUILD_NUMBER}/" src/pocketmine/VersionInfo.php
|
||||||
|
|
||||||
|
- name: Minify BedrockData JSON files
|
||||||
|
run: php src/pocketmine/resources/vanilla/.minify_json.php
|
||||||
|
|
||||||
|
- name: Run preprocessor
|
||||||
|
run: |
|
||||||
|
PM_PREPROCESSOR_PATH="$GITHUB_WORKSPACE/build/preprocessor"
|
||||||
|
php "$PM_PREPROCESSOR_PATH/PreProcessor.php" --path=src --multisize || (echo "Preprocessor exited with code $?" && exit 1)
|
||||||
|
#dump the diff of preprocessor replacements to a patch in case it has bugs
|
||||||
|
git diff > preprocessor_diff.patch
|
||||||
|
VENDOR_PM="$GITHUB_WORKSPACE/vendor"
|
||||||
|
VENDOR_PM_BACKUP="$GITHUB_WORKSPACE/vendor-before-preprocess"
|
||||||
|
cp -r "$VENDOR_PM" "$VENDOR_PM_BACKUP"
|
||||||
|
for f in $(ls $VENDOR_PM/pocketmine); do
|
||||||
|
echo "Processing directory \"$f\"..."
|
||||||
|
php "$PM_PREPROCESSOR_PATH/PreProcessor.php" --path="$VENDOR_PM/pocketmine/$f" --multisize || (echo "Preprocessor exited with code $?" && exit 1)
|
||||||
|
echo "Checking for changes in \"$f\"..."
|
||||||
|
DIFF=$(git diff --no-index "$VENDOR_PM_BACKUP/pocketmine/$f" "$VENDOR_PM/pocketmine/$f" || true)
|
||||||
|
if [ "$DIFF" != "" ]; then
|
||||||
|
PATCH="$GITHUB_WORKSPACE/preprocessor_diff_$f.patch"
|
||||||
|
echo "$DIFF" > "$PATCH"
|
||||||
|
echo "Generated patch file \"$PATCH\""
|
||||||
|
else
|
||||||
|
echo "No diff generated for \"$f\" (preprocessor made no changes)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Build PocketMine-MP.phar
|
||||||
|
run: composer make-server
|
||||||
|
|
||||||
|
- name: Get PocketMine-MP release version
|
||||||
|
id: get-pm-version
|
||||||
|
run: |
|
||||||
|
echo ::set-output name=PM_VERSION::$(php -r 'require "vendor/autoload.php"; echo \pocketmine\BASE_VERSION;')
|
||||||
|
echo ::set-output name=MCPE_VERSION::$(php -r 'require "vendor/autoload.php"; echo \pocketmine\network\mcpe\protocol\ProtocolInfo::MINECRAFT_VERSION_NETWORK;')
|
||||||
|
echo ::set-output name=PM_VERSION_SHORT::$(php -r 'require "vendor/autoload.php"; $v = explode(".", \pocketmine\BASE_VERSION); array_pop($v); echo implode(".", $v);')
|
||||||
|
echo ::set-output name=PM_VERSION_MD::$(php -r 'require "vendor/autoload.php"; echo str_replace(".", "", \pocketmine\BASE_VERSION);')
|
||||||
|
|
||||||
|
- name: Generate build info
|
||||||
|
run: php build/generate-build-info-json.php ${{ github.sha }} ${{ steps.get-pm-version.outputs.PM_VERSION }} ${{ github.repository }} > build_info.json
|
||||||
|
|
||||||
|
- name: Upload release artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: release_artifacts
|
||||||
|
path: |
|
||||||
|
${{ github.workspace }}/PocketMine-MP.phar
|
||||||
|
${{ github.workspace }}/start.*
|
||||||
|
${{ github.workspace }}/build_info.json
|
||||||
|
|
||||||
|
- name: Create draft release
|
||||||
|
uses: ncipollo/release-action@v1.8.6
|
||||||
|
with:
|
||||||
|
artifacts: ${{ github.workspace }}/PocketMine-MP.phar,${{ github.workspace }}/start.*,${{ github.workspace }}/build_info.json
|
||||||
|
commit: ${{ github.sha }}
|
||||||
|
draft: true
|
||||||
|
name: PocketMine-MP ${{ steps.get-pm-version.outputs.PM_VERSION }}
|
||||||
|
tag: ${{ steps.get-pm-version.outputs.PM_VERSION }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
body: |
|
||||||
|
**For Minecraft: Bedrock Edition ${{ steps.get-pm-version.outputs.MCPE_VERSION }}**
|
||||||
|
|
||||||
|
Please see the [changelogs](/changelogs/${{ steps.get-pm-version.outputs.PM_VERSION_SHORT }}.md#${{ steps.get-pm-version.outputs.PM_VERSION_MD }}) for details.
|
||||||
|
|
||||||
|
- name: Upload preprocessor diffs
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: preprocessor_diffs
|
||||||
|
path: ${{ github.workspace }}/preprocessor_diff*.patch
|
||||||
|
|
45
.github/workflows/update-updater-api.yml
vendored
Normal file
45
.github/workflows/update-updater-api.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
name: Update update.pmmp.io API info
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install jq
|
||||||
|
run: sudo apt update && sudo apt install jq -y
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: pmmp/update.pmmp.io
|
||||||
|
ssh-key: ${{ secrets.UPDATE_PMMP_IO_DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Get actual tag name
|
||||||
|
id: tag-name
|
||||||
|
run: echo ::set-output name=TAG_NAME::$(echo "${{ github.ref }}" | sed 's{^refs/tags/{{')
|
||||||
|
|
||||||
|
- name: Download new release information
|
||||||
|
run: curl -f -L ${{ github.server_url }}/${{ github.repository }}/releases/download/${{ steps.tag-name.outputs.TAG_NAME }}/build_info.json -o new_build_info.json
|
||||||
|
|
||||||
|
- name: Detect channel
|
||||||
|
id: channel
|
||||||
|
run: echo ::set-output name=CHANNEL::$(jq -r '.channel' new_build_info.json)
|
||||||
|
|
||||||
|
- name: Copy release information
|
||||||
|
run: |
|
||||||
|
cp new_build_info.json channels/${{ steps.channel.outputs.CHANNEL }}.json
|
||||||
|
rm new_build_info.json
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
run: |
|
||||||
|
git config user.name github-actions
|
||||||
|
git config user.email github-actions@github.com
|
||||||
|
git add .
|
||||||
|
git diff-index --quiet HEAD || git commit -m "New ${{ steps.channel.outputs.CHANNEL }} release: ${{ github.repository }} ${{ steps.tag-name.outputs.TAG_NAME }}"
|
||||||
|
|
||||||
|
- name: Push changes
|
||||||
|
run: git push
|
43
build/generate-build-info-json.php
Normal file
43
build/generate-build-info-json.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* ____ _ _ __ __ _ __ __ ____
|
||||||
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||||
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||||
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||||
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* @author PocketMine Team
|
||||||
|
* @link http://www.pocketmine.net/
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
|
if(count($argv) !== 4){
|
||||||
|
fwrite(STDERR, "required args: <git hash> <tag name> <github repo (owner/name)>");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
"php_version" => sprintf("%d.%d", PHP_MAJOR_VERSION, PHP_MINOR_VERSION),
|
||||||
|
"base_version" => \pocketmine\BASE_VERSION,
|
||||||
|
"build" => \pocketmine\BUILD_NUMBER,
|
||||||
|
"is_dev" => \pocketmine\IS_DEVELOPMENT_BUILD,
|
||||||
|
"channel" => \pocketmine\BUILD_CHANNEL,
|
||||||
|
"git_commit" => $argv[1],
|
||||||
|
"mcpe_version" => \pocketmine\network\mcpe\protocol\ProtocolInfo::MINECRAFT_VERSION_NETWORK,
|
||||||
|
"date" => time(), //TODO: maybe we should embed this in VersionInfo?
|
||||||
|
"details_url" => "https://github.com/$argv[3]/releases/tag/$argv[2]",
|
||||||
|
"download_url" => "https://github.com/$argv[3]/releases/download/$argv[2]/PocketMine-MP.phar",
|
||||||
|
"source_url" => "https://github.com/$argv[3]/tree/$argv[2]",
|
||||||
|
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
|
@ -24,20 +24,23 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\build\make_release;
|
namespace pocketmine\build\make_release;
|
||||||
|
|
||||||
use pocketmine\utils\VersionString;
|
use pocketmine\utils\VersionString;
|
||||||
|
use function count;
|
||||||
use function dirname;
|
use function dirname;
|
||||||
use function fgets;
|
use function fgets;
|
||||||
use function file_get_contents;
|
use function file_get_contents;
|
||||||
use function file_put_contents;
|
use function file_put_contents;
|
||||||
|
use function fwrite;
|
||||||
use function preg_replace;
|
use function preg_replace;
|
||||||
use function sleep;
|
use function sleep;
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
use function system;
|
use function system;
|
||||||
use const pocketmine\BASE_VERSION;
|
use const pocketmine\BASE_VERSION;
|
||||||
|
use const STDERR;
|
||||||
use const STDIN;
|
use const STDIN;
|
||||||
|
|
||||||
require_once dirname(__DIR__) . '/vendor/autoload.php';
|
require_once dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
function replaceVersion(string $versionInfoPath, string $newVersion, bool $isDev) : void{
|
function replaceVersion(string $versionInfoPath, string $newVersion, bool $isDev, string $channel) : void{
|
||||||
$versionInfo = file_get_contents($versionInfoPath);
|
$versionInfo = file_get_contents($versionInfoPath);
|
||||||
$versionInfo = preg_replace(
|
$versionInfo = preg_replace(
|
||||||
$pattern = '/^const BASE_VERSION = "(\d+)\.(\d+)\.(\d+)(?:-(.*))?";$/m',
|
$pattern = '/^const BASE_VERSION = "(\d+)\.(\d+)\.(\d+)(?:-(.*))?";$/m',
|
||||||
@ -49,6 +52,11 @@ function replaceVersion(string $versionInfoPath, string $newVersion, bool $isDev
|
|||||||
'const IS_DEVELOPMENT_BUILD = ' . ($isDev ? 'true' : 'false') . ';',
|
'const IS_DEVELOPMENT_BUILD = ' . ($isDev ? 'true' : 'false') . ';',
|
||||||
$versionInfo
|
$versionInfo
|
||||||
);
|
);
|
||||||
|
$versionInfo = preg_replace(
|
||||||
|
'/^const BUILD_CHANNEL = ".*";$/m',
|
||||||
|
'const BUILD_CHANNEL = "' . $channel . '";',
|
||||||
|
$versionInfo
|
||||||
|
);
|
||||||
file_put_contents($versionInfoPath, $versionInfo);
|
file_put_contents($versionInfoPath, $versionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,8 +65,12 @@ function replaceVersion(string $versionInfoPath, string $newVersion, bool $isDev
|
|||||||
* @phpstan-param list<string> $argv
|
* @phpstan-param list<string> $argv
|
||||||
*/
|
*/
|
||||||
function main(array $argv) : void{
|
function main(array $argv) : void{
|
||||||
if(isset($argv[1])){
|
if(count($argv) < 2){
|
||||||
$currentVer = new VersionString($argv[1]);
|
fwrite(STDERR, "Arguments: <channel> [release version]\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if(isset($argv[2])){
|
||||||
|
$currentVer = new VersionString($argv[2]);
|
||||||
}else{
|
}else{
|
||||||
$currentVer = new VersionString(BASE_VERSION);
|
$currentVer = new VersionString(BASE_VERSION);
|
||||||
}
|
}
|
||||||
@ -78,10 +90,10 @@ function main(array $argv) : void{
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
$versionInfoPath = dirname(__DIR__) . '/src/pocketmine/VersionInfo.php';
|
$versionInfoPath = dirname(__DIR__) . '/src/pocketmine/VersionInfo.php';
|
||||||
replaceVersion($versionInfoPath, $currentVer->getBaseVersion(), false);
|
replaceVersion($versionInfoPath, $currentVer->getBaseVersion(), false, $argv[1]);
|
||||||
system('git commit -m "Release ' . $currentVer->getBaseVersion() . '" --include "' . $versionInfoPath . '"');
|
system('git commit -m "Release ' . $currentVer->getBaseVersion() . '" --include "' . $versionInfoPath . '"');
|
||||||
system('git tag ' . $currentVer->getBaseVersion());
|
system('git tag ' . $currentVer->getBaseVersion());
|
||||||
replaceVersion($versionInfoPath, $nextVer->getBaseVersion(), true);
|
replaceVersion($versionInfoPath, $nextVer->getBaseVersion(), true, "");
|
||||||
system('git add "' . $versionInfoPath . '"');
|
system('git add "' . $versionInfoPath . '"');
|
||||||
system('git commit -m "' . $nextVer->getBaseVersion() . ' is next" --include "' . $versionInfoPath . '"');
|
system('git commit -m "' . $nextVer->getBaseVersion() . ' is next" --include "' . $versionInfoPath . '"');
|
||||||
echo "pushing changes in 5 seconds\n";
|
echo "pushing changes in 5 seconds\n";
|
||||||
|
@ -67,7 +67,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"make-devtools": "@php -dphar.readonly=0 tests/plugins/DevTools/src/DevTools/ConsoleScript.php --make tests/plugins/DevTools --out plugins/DevTools.phar",
|
"make-devtools": "@php -dphar.readonly=0 tests/plugins/DevTools/src/DevTools/ConsoleScript.php --make tests/plugins/DevTools --out plugins/DevTools.phar",
|
||||||
"make-server": [
|
"make-server": [
|
||||||
"@composer install --no-dev --classmap-authoritative",
|
"@composer install --no-dev --classmap-authoritative --ignore-platform-reqs",
|
||||||
"@php -dphar.readonly=0 build/server-phar.php"
|
"@php -dphar.readonly=0 build/server-phar.php"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -36,3 +36,4 @@ const NAME = "PocketMine-MP";
|
|||||||
const BASE_VERSION = "3.22.2";
|
const BASE_VERSION = "3.22.2";
|
||||||
const IS_DEVELOPMENT_BUILD = true;
|
const IS_DEVELOPMENT_BUILD = true;
|
||||||
const BUILD_NUMBER = 0;
|
const BUILD_NUMBER = 0;
|
||||||
|
const BUILD_CHANNEL = "";
|
||||||
|
@ -2,7 +2,7 @@ parameters:
|
|||||||
ignoreErrors:
|
ignoreErrors:
|
||||||
-
|
-
|
||||||
message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, string\\|null given\\.$#"
|
message: "#^Parameter \\#3 \\$subject of function preg_replace expects array\\|string, string\\|null given\\.$#"
|
||||||
count: 1
|
count: 2
|
||||||
path: ../../../build/make-release.php
|
path: ../../../build/make-release.php
|
||||||
|
|
||||||
-
|
-
|
||||||
|
Loading…
x
Reference in New Issue
Block a user