diff --git a/README.md b/README.md index a542afd..f278d4d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ # mineunit-actions -GitHub actions for mt-mods/mineunit -Executes Lua unit tests with `busted` in `spec` directory with code coverage analysis using `cluacov` and generates badge for coverage. +Executes Minetest Lua mod unit tests with [`mineunit`](https://github.com/mt-mods/mineunit) in `spec` directory with code coverage analysis generating badges for coverage. Example badges: -* ![](https://byob.yarr.is/S-S-X/metatool/metatool-coverage) -* ![](https://byob.yarr.is/S-S-X/metatool/sharetool-coverage) +* ![mineunit](https://mineunit-badges.000webhostapp.com/S-S-X/fence_connect/coverage) +* ![mineunit](https://mineunit-badges.000webhostapp.com/S-S-X/metatool/metatool-coverage) Examples in projects: * https://github.com/S-S-X/metatool @@ -13,6 +12,8 @@ Examples in projects: * https://github.com/mt-mods/technic * https://github.com/mt-mods/machine_parts +## Example setup + Example workflow file `.github/workflows/mineunit.yml`: ```yaml name: mineunit @@ -24,32 +25,38 @@ jobs: steps: - uses: actions/checkout@v2 - id: mineunit - uses: mt-mods/mineunit-actions@master - with: - badge-color: "CC9909" - - uses: RubbaBoy/BYOB@v1.2.0 + uses: mt-mods/mineunit-actions@v0.3 with: - NAME: "${{ steps.mineunit.outputs.badge-name }}" - LABEL: "${{ steps.mineunit.outputs.badge-label }}" - STATUS: "${{ steps.mineunit.outputs.badge-status }}" - COLOR: "${{ steps.mineunit.outputs.badge-color }}" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + badge-secret: ${{ secrets.MineunitBadgesAPIKey }} ``` -Optional parameters for `mt-mods/mineunit-actions`: +You need to create secret `MineunitBadgesAPIKey` with valid API key to generate and update badges. +Optionally you can disable badges by removing `badge-secret` or leaving it empty. + +## Mineunit-actions parameters and outputs + +#### Optional parameters for `mt-mods/mineunit-actions`: -* **`working-directory`** Working directory for unit tests -* **`badge-name`** Code coverage badge name -* **`badge-label`** Code coverage badge label -* **`badge-color`** Code coverage badge color -* **`mineunit-version`** Mineunit version +* **`working-directory`** Working directory for unit tests. + *default:* `.` +* **`badge-name`** Code coverage badge name (unique id). + *default:* `coverage` +* **`badge-label`** Code coverage badge label. + *default:* `Test coverage` +* **`badge-color`** Code coverage badge color. + *default:* `99CC09` +* **`badge-service`** Custom badge service base URL, see https://github.com/S-S-X/mineunit-badges. +* **`badge-secret`** Badge service API key, no badges generated if empty. +* **`production-branch`** Production branch is what is used for badge generation. + *default:* `master` +* **`badge-purge-with`** Purge GitHub Camo links in https://github.com/ path, %s substituted for production-branch. + *default:* `"[account|organization]/[repository]/blob/%s/README.md"` +* **`mineunit-version`** Mineunit version. -Outputs: +#### Outputs that can be used on workflow after Mineunit action completed: -* **`steps.mineunit.outputs.badge-name`** Code coverage badge name waiting for issues/#1 -* **`steps.mineunit.outputs.badge-label`** Code coverage badge label waiting for issues/#1 -* **`steps.mineunit.outputs.badge-status`** Code coverage badge status waiting for issues/#1 -* **`steps.mineunit.outputs.badge-color`** Code coverage badge color waiting for issues/#1 +* **`steps.mineunit.outputs.badge-status`** Generated badge status, right hand side text of badge. +* **`steps.mineunit.outputs.badge-url`** Generated badge URL. * **`steps.mineunit.outputs.mineunit-stdout`** Stdout produced during busted run * **`steps.mineunit.outputs.mineunit-spec-missing`** Set to true if no spec files found for busted * **`steps.mineunit.outputs.mineunit-report`** Mineunit detailed test report diff --git a/action.yml b/action.yml index 39f1256..4765c7d 100644 --- a/action.yml +++ b/action.yml @@ -22,24 +22,37 @@ inputs: description: "Code coverage badge color" required: true default: "99CC09" + + badge-service: + description: "Badge service base URL" + required: true + default: "https://mineunit-badges.000webhostapp.com/${{ github.repository }}" + badge-secret: + description: "Badge service API key" + required: false + + production-branch: + description: "Production branch is what is used for badge generation" + required: true + default: master + + badge-purge-with: + description: "Purge GitHub Camo links in https://github.com/ path, %s substituted for production-branch" + required: true + default: "${{ github.repository }}/blob/%s/README.md" + mineunit-version: description: "Mineunit version" required: false outputs: # Generated or supplied badge properties - badge-name: - description: "Code coverage badge name waiting for issues/#1" - value: ${{ steps.badge-wrapper-actions-issue-1.outputs.badge-name }} - badge-label: - description: "Code coverage badge label waiting for issues/#1" - value: ${{ steps.badge-wrapper-actions-issue-1.outputs.badge-label }} + badge-url: + description: "Code coverage badge URL" + value: "${{ inputs.badge-service }}/${{ inputs.badge-name }}" badge-status: - description: "Code coverage badge status waiting for issues/#1" + description: "Code coverage badge status" value: "${{ steps.mineunit-coverage.outputs.total }} in ${{ steps.mineunit-coverage.outputs.files }} files" - badge-color: - description: "Code coverage badge color waiting for issues/#1" - value: ${{ steps.badge-wrapper-actions-issue-1.outputs.badge-color }} # Mineunit test framework output mineunit-stdout: @@ -122,10 +135,25 @@ runs: echo "::set-output name=total::$(tail -n 2 luacov.report.out | grep ^Total | grep -o '[0-9.]\+%$')" awk -v p=0 '/^----/{p++;next}p==2{exit}p' luacov.report.out | sort -hrk4 > luacov.report.sum echo "::set-output name=files::$(grep -cv '\s0\.00%' luacov.report.sum)/$(wc -l]\+src="https://camo.githubusercontent.com/[^>]*data-canonical-src="'"$BADGEURL"'"[^>]\+>') + LINKS=(sed -rn 's/^.*\ssrc="([^"<>]+)".*$/\1/p') + echo + echo "only-if: [[ '${{ github.event_name }}' == 'push' && '${{ github.ref }}' == 'refs/heads/${{ inputs.production-branch }}' && '${{ inputs.badge-secret }}' =~ ^[^\ ]+$ ]]" + [[ '${{ github.event_name }}' == 'push' && '${{ github.ref }}' == 'refs/heads/${{ inputs.production-branch }}' && '${{ inputs.badge-secret }}' =~ ^[^\ ]+$ ]] || exit 0 + echo + data='{"label":"${{ inputs.badge-label }}","color":"${{ inputs.badge-color }}","value":"${{ steps.mineunit-coverage.outputs.total }} in ${{ steps.mineunit-coverage.outputs.files }} files"}' + "${CURL[@]}" -H "Content-Type: application/json" -d "$data" "${BADGEURL}/${{ inputs.badge-secret }}" + echo "Badge URL: ${BADGEURL}" + [[ '${{ inputs.badge-purge-with }}' == '' ]] && exit 0 + echo "Purging Camo caches based on $CAMO_CHECK_URL links" + echo + "${CURL[@]}" "$CAMO_CHECK_URL" | "${CAMO[@]}" | "${LINKS[@]}" | sort -u > camo.purge.uri + echo "Purging cache for $(wc -l < camo.purge.uri) Camo entries" + echo + xargs -ra camo.purge.uri "${CURL[@]}" -X PURGE