diff --git a/.github/workflows/ncc_workflow.yml b/.github/workflows/ncc_workflow.yml index 8be0128..0fa533e 100644 --- a/.github/workflows/ncc_workflow.yml +++ b/.github/workflows/ncc_workflow.yml @@ -9,7 +9,7 @@ on: workflow_dispatch: jobs: - build: + release: runs-on: ubuntu-latest container: image: php:8.3 @@ -53,12 +53,63 @@ jobs: run: | ncc build --config release --log-level debug - - name: Upload build artifacts + - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: OptsLib_build + name: release path: build/release/net.nosial.optslib.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 + + + # Checking for phpunit.xml check-phpunit: runs-on: ubuntu-latest outputs: @@ -74,9 +125,59 @@ jobs: 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: [build, check-phpunit] + needs: [release, release-executable, check-phpunit] runs-on: ubuntu-latest container: image: php:8.3 @@ -89,8 +190,8 @@ jobs: - name: Download build artifacts uses: actions/download-artifact@v4 with: - name: OptsLib_build - path: OptsLib_build # Adjust this to download the artifact directly under 'OptsLib_build' + name: release + path: release - name: Install dependencies run: | @@ -128,15 +229,22 @@ jobs: - name: Install NCC packages run: | - ncc package install --package="OptsLib_build/net.nosial.optslib.ncc" --build-source --reinstall -y --log-level debug + ncc package install --package="release/net.nosial.optslib.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 + 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 - release: - needs: [build, test] + - 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: @@ -147,16 +255,54 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Download build artifacts + - name: Download documentation artifact uses: actions/download-artifact@v4 with: - name: OptsLib_build - path: OptsLib_build + name: documentation + path: documentation - - name: Upload to GitHub Release + - name: Upload documentation artifact uses: softprops/action-gh-release@v1 with: - files: | - OptsLib_build/net.nosial.optslib.ncc + files: | + documentation/* env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + + release-artifacts: + needs: [release, release-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-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 }} diff --git a/Makefile b/Makefile index 3616ef4..55b5ea0 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,25 @@ # Variables -CONFIG ?= release +DEFAULT_CONFIGURATION ?= release LOG_LEVEL = debug -OUTDIR = build/$(CONFIG) -PACKAGE = $(OUTDIR)/net.nosial.optslib.ncc # Default Target -all: build +all: release release-executable # Build Steps -build: - ncc build --config=$(CONFIG) --log-level $(LOG_LEVEL) +release: + ncc build --config=release --log-level $(LOG_LEVEL) +release-executable: + ncc build --config=release-executable --log-level $(LOG_LEVEL) -install: build - ncc package install --package=$(PACKAGE) --skip-dependencies --build-source --reinstall -y --log-level $(LOG_LEVEL) -test: build +install: release + ncc package install --package=build/release/net.nosial.optslib.ncc --skip-dependencies --build-source --reinstall -y --log-level $(LOG_LEVEL) + +test: release + [ -f phpunit.xml ] || { echo "phpunit.xml not found"; exit 1; } phpunit clean: rm -rf build -.PHONY: all build install test clean \ No newline at end of file +.PHONY: all install test clean release release-executable \ No newline at end of file diff --git a/phpdoc.dist.xml b/phpdoc.dist.xml new file mode 100644 index 0000000..2f3c792 --- /dev/null +++ b/phpdoc.dist.xml @@ -0,0 +1,15 @@ + + + + build/docs + build/cache + + + + + src/OptsLib + + OptsLib + + + \ No newline at end of file diff --git a/project.json b/project.json index e97d4b7..94fed30 100644 --- a/project.json +++ b/project.json @@ -2,8 +2,8 @@ "project": { "compiler": { "extension": "php", - "minimum_version": "8.0", - "maximum_version": "8.2" + "minimum_version": "8.2", + "maximum_version": "8.0" }, "update_source": { "source": "nosial/libs.opts@n64", @@ -18,8 +18,8 @@ "assembly": { "name": "OptsLib", "package": "net.nosial.optslib", - "copyright": "Copyright (c) 2022-2023 Nosial", "description": "A simple options parser library for PHP", + "copyright": "Copyright (c) 2022-2023 Nosial", "version": "1.1.0", "uuid": "20aefdfa-7b91-11ed-919f-cb63712c8e36" }, @@ -31,6 +31,14 @@ "name": "release", "build_type": "ncc", "output": "build/release/%ASSEMBLY.PACKAGE%.ncc" + }, + { + "name": "release-executable", + "build_type": "executable", + "output": "build/release/release_executable_gz", + "options": { + "ncc_configuration": "release" + } } ] }