Skip to content

Auto test, build and publish #745

Auto test, build and publish

Auto test, build and publish #745

Workflow file for this run

name: Auto test, build and publish
on:
push:
pull_request:
jobs:
runtests:
name: Preside Test Suite
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[twgit] Init') && github.ref != 'refs/heads/stable'"
env:
DB_USER: root
DB_PASSWORD: root
strategy:
fail-fast: false
matrix:
include:
- cfengine: "lucee@5.4"
jdkVersion: "11"
experimental: false
- cfengine: "lucee@^6.2.0-SNAPSHOT"
jdkVersion: "21"
experimental: true
continue-on-error: ${{ matrix.experimental }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Database and Fixtures
run: |
sudo systemctl start mysql.service
mysql -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} -e 'CREATE DATABASE presidetestsuite;'
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: ${{ matrix.jdkVersion }}
- name: Setup CommandBox CLI
uses: Ortus-Solutions/setup-commandbox@v2.0.1
- name: Install dependencies
run: |
box install --force --verbose
- name: Setup .env For Runner
run: |
touch ${GITHUB_WORKSPACE}/tests/.env
printf "PRESIDETEST_DB_HOST=127.0.0.1\n" >> .env
printf "PRESIDETEST_DB_NAME=presidetestsuite\n" >> .env
printf "PRESIDETEST_DB_PORT=3306\n" >> .env
printf "PRESIDETEST_DB_USER=${{ env.DB_USER }}\n" >> .env
printf "PRESIDETEST_DB_PASSWORD=${{ env.DB_PASSWORD }}\n" >> .env
- name: Start ${{ matrix.cfengine }} Server
run: |
# Startup the Server
box server start directory="${GITHUB_WORKSPACE}/tests" serverConfigFile="${GITHUB_WORKSPACE}/tests/server.json" cfengine="${{ matrix.cfengine }}" --noSaveSettings --debug
# Test site build up
curl http://127.0.0.1:9999
- name: Run tests
run: |
cd tests/
mkdir -p results
exitcode=0
box testbox run --verbose outputFile=results/test-results outputFormats=json,antjunit
- name: Upload Test Results Artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: preside-test-results-${{ matrix.cfengine }}-jdk${{ matrix.jdkVersion }}
path: |
tests/results/*
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: tests/results/*.xml
runcypresstests:
name: Run Cypress Test suites
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[twgit] Init') && github.ref != 'refs/heads/stable'"
env:
DB_USER: root
DB_PASSWORD: root
DB_NAME: endtoenddb
strategy:
fail-fast: false
matrix:
include:
- cfengine: "lucee@5.4"
jdkVersion: "11"
experimental: false
- cfengine: "lucee@^6.1.1-SNAPSHOT"
jdkVersion: "21"
experimental: true
continue-on-error: ${{ matrix.experimental }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install dependencies
uses: pixl8/github-action-box-install@v2
with:
verbose: true
force: true
- name: Build static assets with grunt
shell: bash
run: |
cd ./system/assets &&
npm install &&
grunt all &&
rm -rf node_modules
- name: Setup Database and Fixtures
run: |
sudo systemctl start mysql.service
mysql -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} -e 'CREATE DATABASE ${{ env.DB_NAME }};'
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: ${{ matrix.jdkVersion }}
- name: Setup CommandBox CLI
uses: Ortus-Solutions/setup-commandbox@v2.0.1
- name: Start ${{ matrix.cfengine }} Server
run: |
cd tests/e2e/apps/fullcmsapp/
cp .cfconfig.gh.json .cfconfig.json
box install commandbox-cfconfig
box server start serverConfigFile="server.json" cfengine="${{ matrix.cfengine }}" --noSaveSettings
http_response=$(curl --max-time 120 -s -o /dev/null -w "%{http_code}" http://127.0.0.1:9998)
if [ $http_response != "200" ]; then
exit 1
fi
- name: Run Cypress Test
uses: cypress-io/github-action@v6
with:
browser: chrome
working-directory: tests/e2e/tests
publish:
name: Publish to Forgebox
needs:
- runtests
- runcypresstests
runs-on: ubuntu-latest
if: "success() && github.event_name != 'pull_request' && ( startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/heads/release-' ) )"
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install dependencies
uses: pixl8/github-action-box-install@v2
with:
verbose: true
force: true
- name: Build static assets with grunt
shell: bash
run: |
cd ./system/assets &&
npm install &&
grunt all &&
rm -rf node_modules
- name: Generate release version number
id: versiongen
uses: pixl8/github-action-twgit-release-version-generator@v3
with:
build_number_start: 8000
- name: Set release variables
shell: bash
env:
RELEASE_VERSION: ${{ steps.versiongen.outputs.semver_release_string }}
IS_SNAPSHOT: ${{ steps.versiongen.outputs.semver_is_snapshot }}
run: |
ZIP_FILE_NAME=Preside-${RELEASE_VERSION/+/-}.zip
if [[ "${IS_SNAPSHOT}" == "false" ]] ; then
RELEASE_CATEGORY=stable
else
RELEASE_CATEGORY="bleeding-edge"
RELEASE_VERSION="${{ steps.versiongen.outputs.semver_release_number }}-snapshot"
fi
echo "RELEASE_CATEGORY=$RELEASE_CATEGORY" >> $GITHUB_ENV
echo "ZIP_FILE_NAME=$ZIP_FILE_NAME" >> $GITHUB_ENV
echo "DOWNLOAD_LOCATION=https://downloads.preside.org/$RELEASE_CATEGORY/$ZIP_FILE_NAME" >> $GITHUB_ENV
echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
- name: Prepare files for release
shell: bash
run: |
echo '{ "version":"$RELEASE_VERSION" }' > version.json &&
echo 'Built on: $( date )' > "Preside-$RELEASE_VERSION-$RELEASE_CATEGORY.txt" &&
mv box.json.published box.json
- name: Inject version numbers
uses: dominicwatson/github-action-envsubst@v1
with:
files: box.json version.json system/config/Config.cfc
- name: Zip up
shell: bash
run: zip -rq $ZIP_FILE_NAME * --exclude jmimemagic.log --exclude=".*" --exclude="*.sh" --exclude="zanata.xml" --exclude="\tests/*" --exclude="\system/externals/lucee-spreadsheet/javaloader/*"
- name: Push to S3
run: aws s3 cp --acl=public-read $ZIP_FILE_NAME s3://downloads.preside.org/${RELEASE_CATEGORY}/${ZIP_FILE_NAME}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'eu-west-2'
- name: Publish to forgebox
uses: pixl8/github-action-box-publish@v5
with:
forgebox_user: pixl8
forgebox_pass: ${{ secrets.FORGEBOX_PASS }}
ignore_timeouts: "true"