From b192973a818f3475860bf44d12fefb077ad3c9cf Mon Sep 17 00:00:00 2001 From: Michael Vasseur <14887731+vmcj@users.noreply.github.com> Date: Fri, 14 Jun 2024 07:59:50 +0200 Subject: [PATCH] Decrease running time of phpstan job The job used the baseline which does the setup of a whole installation but we only need composer for phpstan. Currently no other job used the baseline.sh so we can decrease this and re-add the parts when needed for future jobs which do use the full installation (unit tests, integration & webstandard for example). Another solution would have been to use our container but as we need docker there and some other parts (phpstan action builds it own container inside ours in that case) this was the easier solution. The different shell functions are now fully POSIX complaint as we ran with bash first together with some aliases which we can't easily expand. --- .github/jobs/baseinstall.sh | 109 --------------------------------- .github/jobs/composer_setup.sh | 52 ++++++++++++++++ .github/workflows/phpstan.yml | 8 ++- 3 files changed, 58 insertions(+), 111 deletions(-) delete mode 100755 .github/jobs/baseinstall.sh create mode 100755 .github/jobs/composer_setup.sh diff --git a/.github/jobs/baseinstall.sh b/.github/jobs/baseinstall.sh deleted file mode 100755 index 592c3f20f16..00000000000 --- a/.github/jobs/baseinstall.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/sh - -# Functions to annotate the Github actions logs -alias trace_on='set -x' -alias trace_off='{ set +x; } 2>/dev/null' - -section_start_internal () { - echo "::group::$1" - trace_on -} - -section_end_internal () { - echo "::endgroup::" - trace_on -} - -alias section_start='trace_off ; section_start_internal ' -alias section_end='trace_off ; section_end_internal ' - -export version="$1" - -set -eux - -section_start "Update packages" -sudo apt update -section_end - -section_start "Install needed packages" -sudo apt install -y acl zip unzip nginx composer php php-fpm php-gd \ - php-cli php-intl php-mbstring php-mysql php-curl php-json \ - php-xml php-zip ntp make sudo debootstrap \ - libcgroup-dev lsof php-cli php-curl php-json php-xml \ - php-zip procps gcc g++ default-jre-headless \ - default-jdk-headless ghc fp-compiler autoconf automake bats \ - python3-sphinx python3-sphinx-rtd-theme rst2pdf fontconfig \ - python3-yaml latexmk curl -section_end - -PHPVERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";') -export PHPVERSION - -section_start "Run composer" -export APP_ENV="dev" -composer install --no-scripts -section_end - -section_start "Set simple admin password" -echo "password" > ./etc/initial_admin_password.secret -echo "default login admin password password" > ~/.netrc -section_end - -section_start "Install domserver" -make configure -./configure --with-baseurl='https://localhost/domjudge/' --enable-doc-build=no --prefix="/opt/domjudge" - -make domserver -sudo make install-domserver -section_end - -section_start "Explicit start mysql + install DB" -sudo /etc/init.d/mysql start - -/opt/domjudge/domserver/bin/dj_setup_database -uroot -proot bare-install -section_end - -section_start "Setup webserver" -sudo cp /opt/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/$PHPVERSION/fpm/pool.d/domjudge.conf - -sudo rm -f /etc/nginx/sites-enabled/* -sudo cp /opt/domjudge/domserver/etc/nginx-conf /etc/nginx/sites-enabled/domjudge - -openssl req -nodes -new -x509 -keyout /tmp/server.key -out /tmp/server.crt -subj "/C=NL/ST=Noord-Holland/L=Amsterdam/O=TestingForPR/CN=localhost" -sudo cp /tmp/server.crt /usr/local/share/ca-certificates/ -sudo update-ca-certificates -# shellcheck disable=SC2002 -cat "$(pwd)/.github/jobs/data/nginx_extra" | sudo tee -a /etc/nginx/sites-enabled/domjudge -sudo nginx -t -section_end - -section_start "Show webserver is up" -for service in nginx php${PHPVERSION}-fpm; do - sudo systemctl restart $service - sudo systemctl status $service -done -section_end - -section_start "Install the example data" -/opt/domjudge/domserver/bin/dj_setup_database -uroot -proot install-examples -section_end - -section_start "Setup user" -# We're using the admin user in all possible roles -echo "DELETE FROM userrole WHERE userid=1;" | mysql -uroot -proot domjudge -if [ "$version" = "team" ]; then - # Add team to admin user - echo "INSERT INTO userrole (userid, roleid) VALUES (1, 3);" | mysql -uroot -proot domjudge - echo "UPDATE user SET teamid = 1 WHERE userid = 1;" | mysql -uroot -proot domjudge -elif [ "$version" = "jury" ]; then - # Add jury to admin user - echo "INSERT INTO userrole (userid, roleid) VALUES (1, 2);" | mysql -uroot -proot domjudge -elif [ "$version" = "balloon" ]; then - # Add balloon to admin user - echo "INSERT INTO userrole (userid, roleid) VALUES (1, 4);" | mysql -uroot -proot domjudge -elif [ "$version" = "admin" ]; then - # Add admin to admin user - echo "INSERT INTO userrole (userid, roleid) VALUES (1, 1);" | mysql -uroot -proot domjudge -fi -section_end - diff --git a/.github/jobs/composer_setup.sh b/.github/jobs/composer_setup.sh new file mode 100755 index 00000000000..3ab90b3a135 --- /dev/null +++ b/.github/jobs/composer_setup.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +set -eux + +# Store artifacts/logs +export ARTIFACTS="/tmp/artifacts" +mkdir -p "$ARTIFACTS" + +# Functions to annotate the Github actions logs +trace_on () { + set -x +} + +trace_off () { + { + set +x + } 2>/dev/null +} + +section_start_internal () { + echo "::group::$1" + trace_on +} + +section_end_internal () { + echo "::endgroup::" + trace_on +} + +section_start () { + if [ "$#" -ne 1 ]; then + echo "Only 1 argument is needed for GHA, 2 was needed for GitLab." + exit 1 + fi + trace_off + section_start_internal "$1" +} + +section_end () { + trace_off + section_end_internal +} + +section_start "Configure PHP" +PHPVERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION."\n";') +export PHPVERSION +echo "$PHPVERSION" | tee -a "$ARTIFACTS"/phpversion.txt +section_end + +section_start "Run composer" +composer install --no-scripts 2>&1 | tee -a "$ARTIFACTS/composer_log.txt" +section_end diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index d2577b6018c..775c3b2f8fc 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -14,10 +14,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Install DOMjudge - run: .github/jobs/baseinstall.sh admin + - name: Setup composer dependencies + run: .github/jobs/composer_setup.sh - uses: php-actions/phpstan@v3 with: configuration: phpstan.dist.neon path: webapp/src webapp/tests php_extensions: gd intl mysqli pcntl zip + - uses: actions/upload-artifact@v4 + if: always() + with: + path: /tmp/artifacts