From 0f50faee8f436e85aa36d971b0e52eb33c9c7c48 Mon Sep 17 00:00:00 2001 From: netkas Date: Sun, 13 Oct 2024 16:36:35 -0400 Subject: [PATCH] Updated Build System --- .github/workflows/ncc_workflow.yml | 674 +++++++++++++++++++++++++++++ Makefile | 56 +-- phpdoc.dist.xml | 15 + project.json | 53 ++- 4 files changed, 769 insertions(+), 29 deletions(-) create mode 100644 .github/workflows/ncc_workflow.yml create mode 100644 phpdoc.dist.xml diff --git a/.github/workflows/ncc_workflow.yml b/.github/workflows/ncc_workflow.yml new file mode 100644 index 0000000..d0f2062 --- /dev/null +++ b/.github/workflows/ncc_workflow.yml @@ -0,0 +1,674 @@ +name: CI + +on: + push: + branches: + - '**' + release: + types: [created] + workflow_dispatch: + +jobs: + release: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release + path: build/release/net.nosial.loglib.ncc + release_static: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release_static --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release_static + path: build/release/net.nosial.loglib_static.ncc + release-compressed: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release-compressed --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release-compressed + path: build/release/net.nosial.loglib.gz.ncc + debug-compressed: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config debug-compressed --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: debug-compressed + path: build/debug/net.nosial.loglib.gz.ncc + release-executable: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release-executable --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release-executable + path: build/release/release_executable_gz + release_static-executable: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release_static-executable --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release_static-executable + path: build/release/release_static_executable_gz + release-compressed-executable: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config release-compressed-executable --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: release-compressed-executable + path: build/release/release_compressed_executable + debug-compressed-executable: + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Build project + run: | + ncc build --config debug-compressed-executable --log-level debug + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: debug-compressed-executable + path: build/debug/debug_compressed_executable + + + # Checking for phpunit.xml + check-phpunit: + runs-on: ubuntu-latest + outputs: + phpunit-exists: ${{ steps.check.outputs.phpunit-exists }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Check for phpunit.xml + id: check + run: | + if [ -f phpunit.xml ]; then + echo "phpunit-exists=true" >> $GITHUB_OUTPUT + else + echo "phpunit-exists=false" >> $GITHUB_OUTPUT + fi + # Checking for phpdoc.dist.xml + check-phpdoc: + runs-on: ubuntu-latest + outputs: + phpdoc-exists: ${{ steps.check.outputs.phpdoc-exists }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Check for phpdoc.dist.xml + id: check + run: | + if [ -f phpdoc.dist.xml ]; then + echo "phpdoc-exists=true" >> $GITHUB_OUTPUT + else + echo "phpdoc-exists=false" >> $GITHUB_OUTPUT + fi + generate-phpdoc: + needs: [release, check-phpdoc] + runs-on: ubuntu-latest + container: + image: php:8.3 + if: needs.check-phpdoc.outputs.phpdoc-exists == 'true' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + + - name: Download PHPDocumentor + run: | + wget https://phpdoc.org/phpDocumentor.phar + chmod +x phpDocumentor.phar + + - name: Generate PHPDoc + run: | + php phpDocumentor.phar -d src -t docs + + - name: Archive PHPDoc + run: | + zip -r docs.zip docs + + - name: Upload PHPDoc + uses: actions/upload-artifact@v4 + with: + name: documentation + path: docs.zip + + test: + needs: [release, release_static, release-compressed, debug-compressed, release-executable, release_static-executable, release-compressed-executable, debug-compressed-executable, check-phpunit] + runs-on: ubuntu-latest + container: + image: php:8.3 + if: needs.check-phpunit.outputs.phpunit-exists == 'true' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: release + path: release + + - name: Install dependencies + run: | + apt update -yqq + apt install git libpq-dev libzip-dev zip make wget gnupg -yqq + curl -sSLf -o /usr/local/bin/install-php-extensions https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions + chmod +x /usr/local/bin/install-php-extensions + install-php-extensions zip + + - name: Install phive + run: | + wget -O phive.phar https://phar.io/releases/phive.phar + wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc + gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79 + gpg --verify phive.phar.asc phive.phar + chmod +x phive.phar + mv phive.phar /usr/local/bin/phive + + - name: Install phab + run: | + phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C + + - name: Install latest version of NCC + run: | + git clone https://git.n64.cc/nosial/ncc.git + cd ncc + make redist + NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1) + if [ -z "$NCC_DIR" ]; then + echo "NCC build directory not found" + exit 1 + fi + php "$NCC_DIR/INSTALL" --auto + cd .. && rm -rf ncc + + - name: Install NCC packages + run: | + ncc package install --package="release/net.nosial.loglib.ncc" --build-source --reinstall -y --log-level debug + + - name: Run PHPUnit tests + run: | + wget https://phar.phpunit.de/phpunit-11.3.phar + php phpunit-11.3.phar --configuration phpunit.xml --log-junit reports/junit.xml --log-teamcity reports/teamcity --testdox-html reports/testdox.html --testdox-text reports/testdox.txt + + - name: Upload test reports + uses: actions/upload-artifact@v4 + with: + name: reports + path: reports + + + release-documentation: + needs: generate-phpdoc + permissions: write-all + runs-on: ubuntu-latest + container: + image: php:8.3 + if: github.event_name == 'release' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download documentation artifact + uses: actions/download-artifact@v4 + with: + name: documentation + path: documentation + + - name: Upload documentation artifact + uses: softprops/action-gh-release@v1 + with: + files: | + documentation/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + + release-artifacts: + needs: [release, release_static, release-compressed, debug-compressed, release-executable, release_static-executable, release-compressed-executable, debug-compressed-executable] + permissions: write-all + runs-on: ubuntu-latest + container: + image: php:8.3 + if: github.event_name == 'release' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download release artifact + uses: actions/download-artifact@v4 + with: + name: release + path: release + - name: Upload release artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download release_static artifact + uses: actions/download-artifact@v4 + with: + name: release_static + path: release_static + - name: Upload release_static artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release_static/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download release-compressed artifact + uses: actions/download-artifact@v4 + with: + name: release-compressed + path: release-compressed + - name: Upload release-compressed artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release-compressed/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download debug-compressed artifact + uses: actions/download-artifact@v4 + with: + name: debug-compressed + path: debug-compressed + - name: Upload debug-compressed artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + debug-compressed/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download release-executable artifact + uses: actions/download-artifact@v4 + with: + name: release-executable + path: release-executable + - name: Upload release-executable artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release-executable/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download release_static-executable artifact + uses: actions/download-artifact@v4 + with: + name: release_static-executable + path: release_static-executable + - name: Upload release_static-executable artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release_static-executable/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download release-compressed-executable artifact + uses: actions/download-artifact@v4 + with: + name: release-compressed-executable + path: release-compressed-executable + - name: Upload release-compressed-executable artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + release-compressed-executable/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download debug-compressed-executable artifact + uses: actions/download-artifact@v4 + with: + name: debug-compressed-executable + path: debug-compressed-executable + - name: Upload debug-compressed-executable artifact to release + uses: softprops/action-gh-release@v1 + with: + files: | + debug-compressed-executable/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Makefile b/Makefile index 9494615..f3de19c 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,37 @@ # Variables -NCC = ncc -PACKAGE_NAME = net.nosial.loglib.ncc -BUILD_CONFIG = release -BUILD_STATIC_CONFIG = release_static +DEFAULT_CONFIGURATION ?= release +LOG_LEVEL = debug -# Directories -SRC_DIR = src -BUILD_DIR = build -RELEASE_BUILD_DIR = $(BUILD_DIR)/$(BUILD_CONFIG) -RELEASE_STATIC_BUILD_DIR = $(BUILD_DIR)/$(BUILD_STATIC_CONFIG) +# Default Target +all: release release_static release-compressed debug-compressed release-executable release_static-executable release-compressed-executable debug-compressed-executable -.PHONY: all release release_static install uninstall clean +# Build Steps +release: + ncc build --config=release --log-level $(LOG_LEVEL) +release_static: + ncc build --config=release_static --log-level $(LOG_LEVEL) +release-compressed: + ncc build --config=release-compressed --log-level $(LOG_LEVEL) +debug-compressed: + ncc build --config=debug-compressed --log-level $(LOG_LEVEL) +release-executable: + ncc build --config=release-executable --log-level $(LOG_LEVEL) +release_static-executable: + ncc build --config=release_static-executable --log-level $(LOG_LEVEL) +release-compressed-executable: + ncc build --config=release-compressed-executable --log-level $(LOG_LEVEL) +debug-compressed-executable: + ncc build --config=debug-compressed-executable --log-level $(LOG_LEVEL) -all: release release_static install -release: prepare_build - $(NCC) build --config=$(BUILD_CONFIG) --out-dir=$(RELEASE_BUILD_DIR) +install: release + ncc package install --package=build/release/net.nosial.loglib.ncc --skip-dependencies --build-source --reinstall -y --log-level $(LOG_LEVEL) -release_static: prepare_build_static - $(NCC) build --config=$(BUILD_STATIC_CONFIG) --out-dir=$(RELEASE_STATIC_BUILD_DIR) - -install: prepare_build - $(NCC) package install --package="$(RELEASE_BUILD_DIR)/$(PACKAGE_NAME)" --skip-dependencies -y - -uninstall: - $(NCC) package uninstall -y --package="$(PACKAGE_NAME)" +test: release + [ -f phpunit.xml ] || { echo "phpunit.xml not found"; exit 1; } + phpunit clean: - rm -rf $(RELEASE_BUILD_DIR) - rm -rf $(RELEASE_STATIC_BUILD_DIR) + rm -rf build -prepare_build: - mkdir -p $(RELEASE_BUILD_DIR) - -prepare_build_static: - mkdir -p $(RELEASE_STATIC_BUILD_DIR) \ No newline at end of file +.PHONY: all install test clean release release_static release-compressed debug-compressed release-executable release_static-executable release-compressed-executable debug-compressed-executable \ No newline at end of file diff --git a/phpdoc.dist.xml b/phpdoc.dist.xml new file mode 100644 index 0000000..9d1a960 --- /dev/null +++ b/phpdoc.dist.xml @@ -0,0 +1,15 @@ + + + + build/docs + build/cache + + + + + src/LogLib + + LogLib + + + \ No newline at end of file diff --git a/project.json b/project.json index f4c2610..4f7afd0 100644 --- a/project.json +++ b/project.json @@ -42,10 +42,61 @@ { "name": "release_static", "build_type": "ncc", + "output": "build/release/%ASSEMBLY.PACKAGE%_static.ncc", "options": { "static": true + } + }, + { + "name": "release-compressed", + "build_type": "ncc", + "output": "build/release/%ASSEMBLY.PACKAGE%.gz.ncc", + "options": { + "compression": "high" + } + }, + { + "name": "debug-compressed", + "build_type": "ncc", + "output": "build/debug/%ASSEMBLY.PACKAGE%.gz.ncc", + "options": { + "compression": "high" }, - "output": "build/release/%ASSEMBLY.PACKAGE%_static.ncc" + "define_constants": { + "DEBUG": "1" + } + }, + { + "name": "release-executable", + "build_type": "executable", + "output": "build/release/release_executable_gz", + "options": { + "ncc_configuration": "release" + } + }, + { + "name": "release_static-executable", + "build_type": "executable", + "output": "build/release/release_static_executable_gz", + "options": { + "ncc_configuration": "release_static" + } + }, + { + "name": "release-compressed-executable", + "build_type": "executable", + "output": "build/release/release_compressed_executable", + "options": { + "ncc_configuration": "release-compressed" + } + }, + { + "name": "debug-compressed-executable", + "build_type": "executable", + "output": "build/debug/debug_compressed_executable", + "options": { + "ncc_configuration": "debug-compressed" + } } ] }