name: Build Feature on: workflow_call: inputs: bats-image: required: false type: string default: bats/bats:latest cucumber-node-image: required: false type: string default: node:22 jobs: bats: runs-on: ubuntu-latest env: GITEA_API_URL: https://gitea.app.keskikuja.site GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} PAGES_HOST: ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_URL: https://ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: niko/gitea-ci-library path: .ci - name: Run bats tests id: bats-tests shell: bash run: | mkdir -p "reports/${GITHUB_SHA:0:8}/bats" set +e docker run --rm -v "$PWD:/code" ${{ inputs.bats-image }} /code/tests/ \ > "reports/${GITHUB_SHA:0:8}/bats/results.txt" 2>&1 BATS_EXIT=$? { echo "

Bats tests

" } > "reports/${GITHUB_SHA:0:8}/bats/index.html" echo "BATS_EXIT=${BATS_EXIT}" >> "${GITHUB_ENV}" exit ${BATS_EXIT} - name: Publish bats reports if: always() shell: bash run: | bash .ci/scripts/publish-git-pages.sh "reports/${GITHUB_SHA:0:8}/bats" - name: Set bats commit status if: always() shell: bash run: | if [ "${BATS_EXIT}" = "0" ]; then STATUS="success" DESC="Bats tests" URL="https://${PAGES_HOST}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/bats/" else STATUS="failure" DESC="Bats tests FAILED" URL="https://${PAGES_HOST}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/bats/" fi bash .ci/scripts/report-status.sh "$STATUS" "$DESC" "$URL" ci-bats cucumber: runs-on: ubuntu-latest container: image: ${{ inputs.cucumber-node-image }} env: GITEA_API_URL: https://gitea.app.keskikuja.site GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} PAGES_HOST: ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_URL: https://ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: niko/gitea-ci-library path: .ci - name: Prepare cucumber id: prepare-cucumber shell: bash run: | apt-get update -qq && apt-get install -y -qq --no-install-recommends lsof jq if npm install @cucumber/cucumber > /dev/null 2>&1 && \ npx --package @cucumber/cucumber cucumber-js --dry-run tests/features/ > /dev/null 2>&1; then echo "TOOL_OK=true" >> "${GITHUB_ENV}" else echo "TOOL_OK=false" >> "${GITHUB_ENV}" fi - name: Run cucumber tests if: always() id: cucumber-tests shell: bash run: | if [ "${TOOL_OK}" != "true" ]; then echo "CUCUMBER_EXIT=1" >> "${GITHUB_ENV}" exit 0 fi mkdir -p "reports/${GITHUB_SHA:0:8}/cucumber" set +e npx cucumber-js \ --format json:"reports/${GITHUB_SHA:0:8}/cucumber/report.json" \ --format html:"reports/${GITHUB_SHA:0:8}/cucumber/index.html" 2>&1 CUCUMBER_EXIT=$? echo "CUCUMBER_EXIT=${CUCUMBER_EXIT}" >> "${GITHUB_ENV}" exit ${CUCUMBER_EXIT} - name: Publish cucumber reports if: always() shell: bash run: | if [ "${TOOL_OK}" = "true" ]; then bash .ci/scripts/publish-git-pages.sh "reports/${GITHUB_SHA:0:8}/cucumber" fi - name: Set cucumber commit status if: always() shell: bash run: | if [ "${TOOL_OK}" != "true" ]; then STATUS="failure" DESC="Cucumber tool unavailable" URL="https://gitea.app.keskikuja.site/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" elif [ "${CUCUMBER_EXIT}" = "0" ]; then STATUS="success" DESC="Cucumber tests passed" URL="https://${PAGES_HOST}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/cucumber/" else STATUS="failure" DESC="Cucumber tests FAILED" URL="https://${PAGES_HOST}/${GITHUB_REPOSITORY}/reports/${GITHUB_SHA:0:8}/cucumber/" fi bash .ci/scripts/report-status.sh "$STATUS" "$DESC" "$URL" ci-cucumber build: runs-on: ubuntu-latest needs: [bats, cucumber] env: GITEA_API_URL: https://gitea.app.keskikuja.site GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} PAGES_HOST: ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_URL: https://ci-reports.helm-dev.keskikuja.site GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: niko/gitea-ci-library path: .ci - name: Generate report index shell: bash run: | SHA8="${GITHUB_SHA:0:8}" mkdir -p "reports/${SHA8}" BATS_PASS=$(grep -c 'ok' "reports/${SHA8}/bats/results.txt" 2>/dev/null || echo 0) BATS_FAIL=$(grep -c 'not ok' "reports/${SHA8}/bats/results.txt" 2>/dev/null || echo 0) CUCUMBER_PASS=$(jq '.summary.passed // 0' "reports/${SHA8}/cucumber/report.json" 2>/dev/null || echo 0) CUCUMBER_FAIL=$(jq '.summary.failed // 0' "reports/${SHA8}/cucumber/report.json" 2>/dev/null || echo 0) { echo "" echo "CI report ${SHA8}" echo "" echo "

CI report ${SHA8}

" echo "

Commit: ${GITHUB_SHA}
Branch: ${GITHUB_REF_NAME}
Run: ${GITHUB_RUN_ID}

" echo "" echo "" echo "" echo "" echo "" echo "
SuitePassedFailedReport
Bats${BATS_PASS}${BATS_FAIL}results.txt" echo " | junit.xml
Cucumber${CUCUMBER_PASS}${CUCUMBER_FAIL}report" echo " | json
" } > "reports/${SHA8}/index.html" - name: Set build commit status run: | bash .ci/scripts/report-status.sh success \ "Build complete" \ "https://gitea.app.keskikuja.site/niko/gitea-ci-library/actions/runs/${GITHUB_RUN_ID}" \ ci-build