{"id":48291828,"url":"https://github.com/thpham/actions","last_synced_at":"2026-04-04T23:09:57.933Z","repository":{"id":332078224,"uuid":"1130992841","full_name":"thpham/actions","owner":"thpham","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-09T21:20:38.000Z","size":147,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-10T01:56:32.032Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thpham.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-09T10:08:16.000Z","updated_at":"2026-03-09T21:19:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thpham/actions","commit_stats":null,"previous_names":["thpham/actions"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/thpham/actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thpham%2Factions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thpham%2Factions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thpham%2Factions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thpham%2Factions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thpham","download_url":"https://codeload.github.com/thpham/actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thpham%2Factions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31418289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T23:09:57.388Z","updated_at":"2026-04-04T23:09:57.925Z","avatar_url":"https://github.com/thpham.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Github Actions, Composite and Reusable Workflows\n\nReusable GitHub Actions workflows for organization-wide standardization, organized by technology stack.\n\n## Available Stacks\n\n| Stack          | Description                            | Documentation                                                            |\n| -------------- | -------------------------------------- | ------------------------------------------------------------------------ |\n| **kotlin-mvn** | Kotlin/Maven/Spring Boot microservices | [View Docs](docs/README.md) \\| [Migration](docs/kotlin-mvn/migration.md) |\n\n## Repository Structure\n\n```\nactions/\n├── .github/workflows/           # Reusable workflows\n│   ├── kotlin-mvn-ci.yml\n│   ├── kotlin-mvn-release.yml\n│   ├── backport.yml\n│   ├── suggest-backports.yml\n│   ├── commitlint.yml\n│   ├── sonar.yml\n│   ├── cleanup-ghcr.yml\n│   ├── cleanup-oci.yml\n│   └── lint-workflows.yml\n├── configs/\n│   └── kotlin-mvn/              # Stack-specific config templates\n│       ├── release-please-config.json\n│       ├── commitlint.config.mjs\n│       └── ...\n├── docs/\n│   ├── README.md                # Documentation index\n│   ├── workflows/               # Workflow-specific documentation\n│   │   ├── ci.md\n│   │   ├── release.md\n│   │   └── ...\n│   └── kotlin-mvn/              # Stack-specific guides\n│       └── migration.md\n└── README.md                    # This file\n```\n\n## Quick Start: kotlin-mvn\n\nFor Kotlin/Maven/Spring Boot microservices with Docker containers.\n\n### CI Workflow\n\n```yaml\n# .github/workflows/ci.yml\nname: CI\n\non:\n  push:\n    branches: [main, \"release/**\"]\n  pull_request:\n    branches: [main, \"release/**\"]\n\n# Grant permissions required by the reusable workflow\npermissions:\n  contents: read\n  packages: write\n  pull-requests: write\n  actions: write\n\njobs:\n  ci:\n    uses: thpham/actions/.github/workflows/kotlin-mvn-ci.yml@main\n    with:\n      docker-image-name: ${{ github.repository }}/myservice-api\n    # GITHUB_TOKEN is automatically available - no secrets block needed\n```\n\n### Release Workflow\n\n```yaml\n# .github/workflows/release.yml\nname: Release\n\non:\n  push:\n    branches: [main, \"release/**\"]\n  workflow_dispatch:\n\n# Grant permissions required by the reusable workflow\npermissions:\n  contents: write\n  packages: write\n  pull-requests: write\n  actions: write\n\njobs:\n  release:\n    uses: thpham/actions/.github/workflows/kotlin-mvn-release.yml@main\n    with:\n      docker-image-name: ${{ github.repository }}/myservice-api\n    # GITHUB_TOKEN is automatically available\n    # Optional: uncomment to pass additional secrets\n    # secrets:\n    #   GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}\n```\n\n\u003e **Security Note:** See [Security Best Practices](docs/README.md#security-best-practices) for the required permissions per workflow and why to avoid `secrets: inherit`.\n\n### All Available Workflows (kotlin-mvn)\n\n| Workflow                 | Purpose                             | Trigger                      |\n| ------------------------ | ----------------------------------- | ---------------------------- |\n| `kotlin-mvn-ci.yml`      | Build, test, lint, Docker preview   | push, pull_request           |\n| `kotlin-mvn-release.yml` | Release Please + Docker + JReleaser | push to main/release/\\*\\*    |\n| `backport.yml`           | Auto cherry-pick PRs                | pull_request_target [closed] |\n| `suggest-backports.yml`  | Suggest backport labels             | pull_request_target [opened] |\n| `commitlint.yml`         | Conventional Commits                | pull_request                 |\n| `sonar.yml`              | Code quality analysis               | push, pull_request           |\n| `cleanup-ghcr.yml`       | GHCR container image cleanup        | PR close, schedule           |\n| `cleanup-oci.yml`        | Multi-registry image cleanup        | schedule, workflow_dispatch  |\n| `lint-workflows.yml`     | Workflow validation                 | push/PR to workflows/\\*\\*    |\n\n**Full documentation:** [Workflow Reference](docs/README.md) | [Migration Guide](docs/kotlin-mvn/migration.md)\n\n## Features\n\n- **Multi-architecture Docker builds** - Native amd64 + arm64 runners (no QEMU)\n- **Release Flow support** - Minor bumps on main, patch bumps on release branches\n- **Automated backporting** - Cherry-pick fixes to maintenance branches\n- **PR preview images** - On-demand Docker images for testing\n- **Code quality** - SonarQube integration with self-hosted support\n- **Conventional Commits** - Enforced commit message format\n- **Registry cleanup** - Automated container image lifecycle management\n\n## Adding a New Stack\n\nTo add support for a new technology stack:\n\n1. Add stack-specific inputs/conditionals to workflows in `.github/workflows/`\n2. Create config templates: `configs/\u003cstack-name\u003e/`\n3. Create stack-specific guides: `docs/\u003cstack-name\u003e/`\n4. Update workflow documentation in `docs/workflows/`\n5. Update this README with the new stack\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthpham%2Factions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthpham%2Factions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthpham%2Factions/lists"}