Updated Build System #18
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.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: | |
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-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.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 --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-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 }} |