diff --git a/.github/workflows/ncc_workflow.yml b/.github/workflows/ncc_workflow.yml new file mode 100644 index 0000000..e262d4b --- /dev/null +++ b/.github/workflows/ncc_workflow.yml @@ -0,0 +1,146 @@ +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: OptsLib_build + path: build/release/net.nosial.optslib.ncc + + test: + needs: build + runs-on: ubuntu-latest + container: + image: php:8.3 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - 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: 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="OptsLib_build/net.nosial.optslib.ncc" --build-source --reinstall -y --log-level debug + + - name: Run PHPUnit tests + if: files.exists('phpunit.xml') + 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: OptsLib_build + path: OptsLib_build + + - name: Upload to GitHub Release + uses: softprops/action-gh-release@v1 + with: + files: | + OptsLib_build/net.nosial.optslib.ncc + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3616ef4 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +# Variables +CONFIG ?= release +LOG_LEVEL = debug +OUTDIR = build/$(CONFIG) +PACKAGE = $(OUTDIR)/net.nosial.optslib.ncc + +# 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 + +.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..fd461b0 --- /dev/null +++ b/bootstrap.php @@ -0,0 +1,3 @@ +