👷Add dynamic status badge using schneegans/dynamic-badges-action #9
Workflow file for this run
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: Go Test | |
on: | |
pull_request: | |
branches: | |
- 'main' | |
paths: | |
- 'examples/go/**' | |
- '.github/workflows/go_test.yml' | |
jobs: | |
set_variables: | |
runs-on: ubuntu-latest | |
outputs: | |
os: ${{ steps.json2vars.outputs.os }} | |
versions_go: ${{ steps.json2vars.outputs.versions_go }} | |
ghpages_branch: ${{ steps.json2vars.outputs.ghpages_branch }} | |
steps: | |
- name: Checkout repository | |
uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Set variables from JSON | |
id: json2vars | |
uses: 7rikazhexde/json2vars-setter@main | |
with: | |
#json-file: .github/workflows/matrix.json | |
json-file: .github/workflows/go_project_matrix.json | |
- name: Debug output values | |
run: | | |
echo "os: ${{ steps.json2vars.outputs.os }}" | |
echo "os[0]: ${{ fromJson(steps.json2vars.outputs.os)[0] }}" | |
echo "os[1]: ${{ fromJson(steps.json2vars.outputs.os)[1] }}" | |
echo "os[2]: ${{ fromJson(steps.json2vars.outputs.os)[2] }}" | |
echo "versions_go: ${{ steps.json2vars.outputs.versions_go }}" | |
echo "versions_go[0]: ${{ fromJson(steps.json2vars.outputs.versions_go)[0] }}" | |
echo "versions_go[1]: ${{ fromJson(steps.json2vars.outputs.versions_go)[1] }}" | |
echo "versions_go[2]: ${{ fromJson(steps.json2vars.outputs.versions_go)[2] }}" | |
echo "ghpages_branch: ${{ steps.json2vars.outputs.ghpages_branch }}" | |
run_tests: | |
needs: set_variables | |
strategy: | |
matrix: | |
os: ${{ fromJson(needs.set_variables.outputs.os) }} | |
go-version: ${{ fromJson(needs.set_variables.outputs.versions_go) }} | |
runs-on: ${{ matrix.os }} | |
outputs: | |
test_status: ${{ steps.set_status.outputs.status }} | |
steps: | |
- name: Checkout repository | |
uses: actions/[email protected] | |
with: | |
fetch-depth: 0 | |
- name: Set up Go | |
uses: actions/[email protected] | |
with: | |
go-version: ${{ matrix.go-version }} | |
# Cache is disabled because: | |
# 1. Currently no external package dependencies | |
# 2. No go.sum file exists | |
# 3. To avoid warning messages in the workflow | |
# Note: Can be enabled when external dependencies are added in the future | |
cache: false | |
- name: Set timezone | |
uses: szenius/[email protected] | |
with: | |
timezoneLinux: "Asia/Tokyo" | |
timezoneMacos: "Asia/Tokyo" | |
timezoneWindows: "Tokyo Standard Time" | |
- name: Display Go version | |
run: go version | |
- name: Show matrix | |
shell: bash | |
run: | | |
# For non-list case | |
ghpages_branch="${{ needs.set_variables.outputs.ghpages_branch }}" | |
# For list case, explicitly enclose the list in "" to make it a string. (Note that it is not ''.) | |
os='${{ needs.set_variables.outputs.os }}' | |
versions_go='${{ needs.set_variables.outputs.versions_go }}' | |
# For list index case | |
os_0="${{ fromJson(needs.set_variables.outputs.os)[0] }}" | |
os_1="${{ fromJson(needs.set_variables.outputs.os)[1] }}" | |
os_2="${{ fromJson(needs.set_variables.outputs.os)[2] }}" | |
versions_go_0="${{ fromJson(needs.set_variables.outputs.versions_go)[0] }}" | |
versions_go_1="${{ fromJson(needs.set_variables.outputs.versions_go)[1] }}" | |
versions_go_2="${{ fromJson(needs.set_variables.outputs.versions_go)[2] }}" | |
echo "os: ${os}" | |
echo "os_0: ${os_0}" | |
echo "os_1: ${os_1}" | |
echo "os_2: ${os_2}" | |
echo "versions_go: ${versions_go}" | |
echo "versions_go_0: ${versions_go_0}" | |
echo "versions_go_1: ${versions_go_1}" | |
echo "versions_go_2: ${versions_go_2}" | |
echo "ghpages_branch: ${ghpages_branch}" | |
# For loop case | |
os_list=$(echo "${os}" | jq -r '.[]' | tr '\n' ' ' | sed 's/ $//') | |
go_versions_list=$(echo "${versions_go}" | jq -r '.[]' | tr '\n' ' ' | sed 's/ $//') | |
for current_os in ${os_list}; do | |
for version in ${go_versions_list}; do | |
echo "Current OS: ${current_os}, Current Go Version: ${version}" | |
done | |
done | |
- name: Get dependencies | |
working-directory: ./examples/go | |
run: go mod download | |
- name: Run tests | |
id: go_test | |
working-directory: ./examples/go | |
continue-on-error: true | |
shell: bash | |
run: | | |
output="$(go test -v ./...)" | |
echo "${output}" | |
- name: Set test status | |
id: set_status | |
if: always() | |
shell: bash | |
run: | | |
if [ "${{ job.status }}" == "cancelled" ]; then | |
echo "status=cancelled" >> "$GITHUB_OUTPUT" | |
elif [ "${{ job.status }}" == "skipped" ]; then | |
echo "status=skipped" >> "$GITHUB_OUTPUT" | |
elif [ "${{ steps.go_test.outcome }}" == "failure" ]; then | |
echo "status=failing" >> "$GITHUB_OUTPUT" | |
elif [ "${{ steps.go_test.outcome }}" == "success" ]; then | |
echo "status=passing" >> "$GITHUB_OUTPUT" | |
else | |
echo "status=pending" >> "$GITHUB_OUTPUT" | |
fi | |
update_badge: | |
needs: run_tests | |
runs-on: ubuntu-latest | |
if: always() | |
steps: | |
- name: Set color | |
id: set_color | |
shell: bash | |
run: | | |
status="${{ needs.run_tests.outputs.test_status }}" | |
if [ "$status" == "passing" ]; then | |
echo "color=2ea44f" >> "$GITHUB_OUTPUT" | |
elif [ "$status" == "failing" ]; then | |
echo "color=cf222e" >> "$GITHUB_OUTPUT" | |
elif [ "$status" == "pending" ]; then | |
echo "color=dbab09" >> "$GITHUB_OUTPUT" | |
else | |
echo "color=808080" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Create badge | |
uses: schneegans/[email protected] | |
with: | |
auth: ${{ secrets.GIST_TOKEN }} | |
gistID: c334da204406866563668140885d170e | |
filename: go-test-badge.json | |
label: Go Test | |
message: ${{ needs.run_tests.outputs.test_status }} | |
color: ${{ steps.set_color.outputs.color }} | |
labelColor: "24292f" | |
style: "flat" | |
namedLogo: "github" | |
logoColor: "white" |