From ae61b3fadf42b93ea80d7466938331f06745903c Mon Sep 17 00:00:00 2001 From: netkas Date: Sun, 29 Sep 2024 21:36:05 -0400 Subject: [PATCH] Add CI workflow and update build configurations --- .github/workflows/ncc_workflow.yml | 162 +++++++++++++++++++++++++++++ .idea/php.xml | 2 +- Makefile | 25 ++++- bootstrap.php | 3 + phpunit.xml | 11 ++ project.json | 11 +- 6 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/ncc_workflow.yml create mode 100644 bootstrap.php create mode 100644 phpunit.xml diff --git a/.github/workflows/ncc_workflow.yml b/.github/workflows/ncc_workflow.yml new file mode 100644 index 0000000..adbe4df --- /dev/null +++ b/.github/workflows/ncc_workflow.yml @@ -0,0 +1,162 @@ +name: CI + +on: + push: + branches: + - '**' + release: + types: [created] + workflow_dispatch: + +jobs: + build: + 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 artifacts + uses: actions/upload-artifact@v4 + with: + name: TgBotLib_build + path: build/release/net.nosial.tgbotlib.ncc + + 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 + + test: + needs: [build, 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: TgBotLib_build + path: TgBotLib_build # Adjust this to download the artifact directly under 'TgBotLib_build' + + - 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="TgBotLib_build/net.nosial.tgbotlib.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 + + release: + needs: [build, test] + 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 build artifacts + uses: actions/download-artifact@v4 + with: + name: TgBotLib_build + path: TgBotLib_build + + - name: Upload to GitHub Release + uses: softprops/action-gh-release@v1 + with: + files: | + TgBotLib_build/net.nosial.tgbotlib.ncc + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml index 91373c3..d50f29f 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -19,7 +19,7 @@ - + diff --git a/Makefile b/Makefile index e3f87d5..38eac71 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,23 @@ -build: - ncc build --config="release" --log-level debug +# Variables +CONFIG ?= release +LOG_LEVEL = debug +OUTDIR = build/$(CONFIG) +PACKAGE = $(OUTDIR)/net.nosial.tgbotlib.ncc -install: - sudo ncc package install --package="build/release/net.nosial.tgbotlib.ncc" --skip-dependencies --reinstall -y --log-level debug +# Default Target +all: build + +# Build Steps +build: + ncc build --config=$(CONFIG) --log-level $(LOG_LEVEL) + +install: build + ncc package install --package=$(PACKAGE) --skip-dependencies --build-source --reinstall -y --log-level $(LOG_LEVEL) + +test: build + phpunit clean: - rm -rf build \ No newline at end of file + rm -rf build + +.PHONY: all build install test clean \ No newline at end of file diff --git a/bootstrap.php b/bootstrap.php new file mode 100644 index 0000000..2d2d1b0 --- /dev/null +++ b/bootstrap.php @@ -0,0 +1,3 @@ + + + + tests + + + + + + + diff --git a/project.json b/project.json index be9eeb2..06ad467 100644 --- a/project.json +++ b/project.json @@ -35,7 +35,16 @@ "configurations": [ { "name": "release", - "output_path": "build/release" + "build_type": "ncc", + "output": "build/release/%ASSEMBLY.PACKAGE%.ncc" + }, + { + "name": "debug", + "build_type": "ncc", + "output": "build/debug/%ASSEMBLY.PACKAGE%.ncc", + "define_constants": { + "DEBUG": "1" + } } ] }