Skip to content

Add Cache, Scheduler, and EventBus modules for enhanced application capabilities #42

Add Cache, Scheduler, and EventBus modules for enhanced application capabilities

Add Cache, Scheduler, and EventBus modules for enhanced application capabilities #42

Workflow file for this run

name: Modules CI
on:
push:
branches: [ main ]
paths:
- 'modules/**'
- 'go.*'
- '.github/workflows/modules-ci.yml'
pull_request:
branches: [ main ]
paths:
- 'modules/**'
- 'go.*'
- '.github/workflows/modules-ci.yml'
# Allow manual trigger
workflow_dispatch:
env:
GO_VERSION: '^1.23.5'
jobs:
# This job identifies which modules have been modified
detect-modules:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
modules: ${{ steps.set-matrix.outputs.modules }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get modified modules
id: set-matrix
run: |
# Get all module directories
ALL_MODULES=$(find modules -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | sort)
# Default to running all modules on main branch or if workflow_dispatch is used
if [[ "${{ github.event_name }}" == "workflow_dispatch" || "${{ github.ref }}" == "refs/heads/main" ]]; then
MODIFIED_MODULES=$ALL_MODULES
else
# For pull requests, check which modules were modified
BASE_SHA=$(git merge-base origin/main HEAD)
# Get modified files
MODIFIED_FILES=$(git diff --name-only $BASE_SHA HEAD)
# Check if go.mod or go.sum were modified
if echo "$MODIFIED_FILES" | grep -E '^go\.(mod|sum)$'; then
# Run all modules if go.mod or go.sum were modified
MODIFIED_MODULES=$ALL_MODULES
else
# Otherwise, determine which modules were modified
MODIFIED_MODULES=""
for MODULE in $ALL_MODULES; do
if echo "$MODIFIED_FILES" | grep -q "^modules/$MODULE/"; then
MODIFIED_MODULES="$MODIFIED_MODULES $MODULE"
fi
done
# If no specific modules were modified, run for all modules
if [ -z "$MODIFIED_MODULES" ]; then
MODIFIED_MODULES=$ALL_MODULES
fi
fi
fi
# Format for matrix
MODULES_JSON=$(echo "$MODIFIED_MODULES" | tr ' ' '\n' | jq -R . | jq -s .)
{
echo "matrix<<EOF"
echo "{\"module\":$MODULES_JSON}"
echo "EOF"
} >> $GITHUB_OUTPUT
{
echo "modules<<EOF"
echo "$MODULES_JSON"
echo "EOF"
} >> $GITHUB_OUTPUT
echo "Modules to test: $MODULES_JSON"
# This job runs the tests for each module
test-modules:
needs: detect-modules
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix: ${{fromJson(needs.detect-modules.outputs.matrix)}}
name: Test ${{ matrix.module }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
check-latest: true
cache: true
- name: Get dependencies
working-directory: modules/${{ matrix.module }}
run: |
go mod download
go mod verify
- name: Run tests for ${{ matrix.module }}
working-directory: modules/${{ matrix.module }}
run: |
go test -v ./... -coverprofile=${{ matrix.module }}-coverage.txt -covermode=atomic
- name: Upload coverage for ${{ matrix.module }}
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: GoCodeAlone/modular
directory: modules/${{ matrix.module }}/
files: ${{ matrix.module }}-coverage.txt
flags: ${{ matrix.module }}
# This job ensures each module can build properly
verify-modules:
needs: detect-modules
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix: ${{fromJson(needs.detect-modules.outputs.matrix)}}
name: Verify ${{ matrix.module }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
check-latest: true
cache: true
- name: Get dependencies
working-directory: modules/${{ matrix.module }}
run: |
go mod download
go mod verify
- name: Verify ${{ matrix.module }}
working-directory: modules/${{ matrix.module }}
run: |
# Verify package can be resolved
go list -e ./...
# Run vet to check for issues
go vet ./...
# Lint runs on all modules together for efficiency
lint-modules:
runs-on: ubuntu-latest
needs: detect-modules
strategy:
fail-fast: false
matrix: ${{fromJson(needs.detect-modules.outputs.matrix)}}
name: Lint ${{ matrix.module }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: modules/${{ matrix.module }}/go.sum
- name: golangci-lint
uses: golangci/golangci-lint-action@v8
with:
version: latest
only-new-issues: true
working-directory: modules/${{ matrix.module }}
args: -c ../../.golangci.github.yml
# This job summarizes the results
modules-summary:
needs: [test-modules, verify-modules, lint-modules]
if: always()
runs-on: ubuntu-latest
steps:
- name: Summary
run: |
echo "# Module Test Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Module | Test | Verify | Lint |" >> $GITHUB_STEP_SUMMARY
echo "|--------|------|--------|------|" >> $GITHUB_STEP_SUMMARY
modules=$(echo '${{ needs.detect-modules.outputs.modules }}' | jq -r '.[]')
for module in $modules; do
test_result="${{ needs.test-modules.result }}"
verify_result="${{ needs.verify-modules.result }}"
lint_result="${{ needs.lint-modules.result }}"
echo "| $module | $test_result | $verify_result | $lint_result |" >> $GITHUB_STEP_SUMMARY
done