Collection of reusable GitHub workflows and composite actions for CI/CD pipelines.
Version is managed via .version. On every push to main, two tags are automatically created/updated:
- Full version tag (for example,
v3.2.0) that points to a specific release - Major version tag (for example,
v3) that tracks the latest release in that major line
Use pinned tags (@v3.2.0) for strict reproducibility, or major tags (@v3) for automatic non-breaking updates.
Path:
.github/workflows/pr-summary-report.yml
What it does:
- Collects merged PRs for a reporting window
- Generates human-readable PR summary in job logs and
GITHUB_STEP_SUMMARY - Produces CSV output and uploads it as
reportartifact
Window behavior:
schedulerun ignoresdays- for
schedule, workflow expects execution on the 1st day of month (UTC), otherwise it fails schedulewindow is calculated as: full previous month in hours + hours elapsed since00:00 UTCof current day- any other run type:
days * 24hours
Inputs:
days(optional, default30): lookback in days for non-scheduled runs
Complete caller workflow example (in another repository):
name: PR Summary Report
on:
workflow_dispatch:
inputs:
days:
description: Number of days to look back for merged PRs
required: false
default: 30
type: number
schedule:
- cron: "0 7 1 * *"
jobs:
pr-summary:
uses: novasamatech/github-actions/.github/workflows/pr-summary-report.yml@v3
with:
days: ${{ fromJSON(github.event.inputs.days || '30') }}
secrets: inherit| Action | Path | Description |
|---|---|---|
| Collect Merged PRs | collect-prs |
Collects merged PRs either from commit diff (src_ref/dst_ref) or by time window on a branch, with multiple release notes formats. |
| Upload to S3 | s3-upload |
Uploads file or directory to S3-compatible storage (via s3cmd) and returns uploaded path. |
| Send Notification | send-notification |
Sends arbitrary messages to Telegram and/or Matrix via an external notification bot service. |
| Send Release Notification | send-release-notification |
Sends release changelog notifications to Telegram and Matrix via an external notification bot service. |
| Trigger Allure TestOps Job | trigger-allure-testops |
Authenticates in Allure TestOps and starts a job run with branch and launch parameters. |
All Python-based actions (send-notification, send-release-notification) share a single pinned dependency set declared at the repository root in requirements.txt. It contains everything needed to run the tests of every Python action.
Create a virtual environment and install the shared dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRun tests for a specific action:
cd send-notification # or send-release-notification
pytest test_*.py -vTo upgrade dependencies, install the latest versions into the venv and refresh the lock file:
source .venv/bin/activate
pip install --upgrade pytest Jinja2
pip freeze > requirements.txtCI (*-prs.yml workflows) installs dependencies with pip install -r requirements.txt, so the same versions run locally and in CI.
.github/workflows/
<action-name>-prs.yml # PR checks workflow per action (tests + post results to PR)
check-version-bump.yml # Validates .version bump on every PR
update-tag.yml # Creates/updates version tags on push to main
pr-summary-report.yml # Reusable workflow (workflow_call) for PR reports
Naming conventions:
- Each composite action lives in its own top-level directory (e.g.,
collect-prs/,send-release-notification/) - PR checks workflow for an action must be named
<action-directory-name>-prs.yml - The
name:field inside the workflow must follow the pattern<action-directory-name> PR checks
This project is licensed under the Apache License 2.0.