{"id":50686712,"url":"https://github.com/felipementel/gh-actions","last_synced_at":"2026-06-08T23:32:27.885Z","repository":{"id":286724070,"uuid":"879941241","full_name":"felipementel/gh-actions","owner":"felipementel","description":":octocat:","archived":false,"fork":false,"pushed_at":"2026-06-01T17:29:09.000Z","size":752,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-01T19:16:38.081Z","etag":null,"topics":["reusable-workflows"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/felipementel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2024-10-28T20:29:36.000Z","updated_at":"2026-06-01T17:29:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"6d50fdf3-c482-46ca-9bd6-0956811ebeac","html_url":"https://github.com/felipementel/gh-actions","commit_stats":null,"previous_names":["felipementel/reusable-workflows","felipementel/gh-actions"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/felipementel/gh-actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipementel%2Fgh-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipementel%2Fgh-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipementel%2Fgh-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipementel%2Fgh-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipementel","download_url":"https://codeload.github.com/felipementel/gh-actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipementel%2Fgh-actions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34085321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["reusable-workflows"],"created_at":"2026-06-08T23:32:26.981Z","updated_at":"2026-06-08T23:32:27.872Z","avatar_url":"https://github.com/felipementel.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# reusable-workflows\n\n:octocat: Coleção de **GitHub Actions Composite Actions** e **Reusable Workflows** para pipelines DevSecOps.\n\n## Status dos Serviços\n\n| Serviço | Status Page |\n|---------|-------------|\n| GitHub | https://www.githubstatus.com/ |\n| Snyk | https://status.snyk.io/ |\n| SonarCloud | https://sonarcloud.statuspage.io/ |\n| Trivy (Aqua Security) | https://status.aquasec.com/ |\n| Docker Hub | https://www.dockerstatus.com/ |\n\n---\n\n## Composite Actions\n\n### Security\n\n| Action | Descrição |\n|--------|-----------|\n| [`tools/security/trivy-scan`](.github/actions/tools/security/trivy-scan) | Scan de vulnerabilidades em imagens Docker com **Trivy** |\n| [`tools/security/snyk-dotnet`](.github/actions/tools/security/snyk-dotnet) | Container monitor e scan de vulnerabilidades com **Snyk** (upload SARIF) |\n| [`tools/security/giteaks`](.github/actions/tools/security/giteaks) | Detecção de secrets no repositório com **GitLeaks** |\n| [`tools/security/safety-python`](.github/actions/tools/security/safety-python) | Verificação de vulnerabilidades em dependências Python com **Safety CLI** |\n| [`tools/security/owasp-zap`](.github/actions/tools/security/owasp-zap) | Baseline scan com **OWASP ZAP** |\n| [`tools/security/checkov`](.github/actions/tools/security/checkov) | Scan de políticas e compliance em IaC Terraform com **Checkov** |\n\n### Code Quality\n\n| Action | Descrição |\n|--------|-----------|\n| [`tools/code-quality/spectral`](.github/actions/tools/code-quality/spectral) | Linting de OpenAPI specs com **Spectral CLI** (rulesets DevOps Linter + OWASP) |\n| [`tools/code-quality/sonar-cloud-dotnet`](.github/actions/tools/code-quality/sonar-cloud-dotnet) | Análise de qualidade de código .NET com **SonarCloud** |\n| [`tools/code-quality/sonar-cloud-python`](.github/actions/tools/code-quality/sonar-cloud-python) | Análise de qualidade de código Python com **SonarCloud** |\n| [`tools/code-quality/sonar-cloud-node`](.github/actions/tools/code-quality/sonar-cloud-node) | Análise de qualidade de código Node.js/React com **SonarCloud** |\n\n### Docker\n\n| Action | Descrição |\n|--------|-----------|\n| [`tools/docker/setup`](.github/actions/tools/docker/setup) | Setup do ambiente Docker (QEMU + Buildx) |\n| [`tools/docker/login`](.github/actions/tools/docker/login) | Autenticação em container registry |\n| [`tools/docker/buildx`](.github/actions/tools/docker/buildx) | Build de imagens Docker com Buildx (multi-platform e export tar) |\n| [`tools/docker/push`](.github/actions/tools/docker/push) | Push de imagens para qualquer container registry |\n| [`tools/docker/check-image`](.github/actions/tools/docker/check-image) | Verificação se uma imagem já existe no registry |\n| [`tools/docker/install`](.github/actions/tools/docker/install) | Instalação do Docker engine no runner (self-hosted) |\n\n### Azure\n\n| Action | Descrição |\n|--------|-----------|\n| [`azure/aca-naming`](.github/actions/azure/aca-naming) | Geração de nomes de recursos Azure Container Apps (ACA, ACAE, RG) |\n| [`azure/aca-deploy`](.github/actions/azure/aca-deploy) | Login no Azure, atualização da imagem no Container App e polling de prontidão |\n| [`azure/aca-summary`](.github/actions/azure/aca-summary) | Escrita do resumo de deploy no GitHub Job Summary |\n\n### .NET\n\n| Action | Descrição |\n|--------|-----------|\n| [`dotnet/get-version`](.github/actions/dotnet/get-version) | Extração de versão (Version, VersionPrefix, VersionSuffix) de um `.csproj` |\n| [`dotnet/dotnet-test`](.github/actions/dotnet/dotnet-test) | Execução de testes com cobertura, geração de relatórios e upload de artefatos |\n\n### Python\n\n| Action | Descrição |\n|--------|-----------|\n| [`python/get-version`](.github/actions/python/get-version) | Extração de versão do projeto Python |\n| [`python/code-quality`](.github/actions/python/code-quality) | Qualidade de código com flake8, black, isort, mypy e compileall |\n\n### Node.js / React\n\n| Action | Descrição |\n|--------|-----------|\n| [`node/get-package-data`](.github/actions/node/get-package-data) | Extração de versão do `package.json` |\n| [`node/env-values`](.github/actions/node/env-values) | Criação de `.env` para aplicações React |\n\n### Git / Utilitários\n\n| Action | Descrição |\n|--------|-----------|\n| [`git/tag-check`](.github/actions/git/tag-check) | Verificação se uma tag Git já existe no repositório remoto |\n| [`git/tag-create`](.github/actions/git/tag-create) | Criação de tag Git anotada e push para o repositório |\n| [`git/gist-badge`](.github/actions/git/gist-badge) | Atualização de badges via Gist (Shields.io) — suporta pyproject.toml e package.json |\n\n---\n\n## Reusable Workflows\n\n| Workflow | Descrição |\n|----------|-----------|\n| [`dotnet-sandbox-api-build.yml`](.github/workflows/dotnet-sandbox-api-build.yml) | Pipeline DevSecOps para APIs .NET — build, testes, scans de segurança, push de imagem |\n| [`dotnet-sandbox-api-deploy-aca.yml`](.github/workflows/dotnet-sandbox-api-deploy-aca.yml) | Deploy de imagem para **Azure Container Apps** (.NET) |\n| [`dotnet-pr-check.yml`](.github/workflows/dotnet-pr-check.yml) | Validação de PRs para projetos .NET |\n| [`python-sandbox-api-build.yml`](.github/workflows/python-sandbox-api-build.yml) | Pipeline DevSecOps para APIs Python — build, testes, scans de segurança, push de imagem |\n| [`python-sandbox-api-deploy-aca.yml`](.github/workflows/python-sandbox-api-deploy-aca.yml) | Deploy de imagem para **Azure Container Apps** (Python) |\n| [`python-pr-check.yml`](.github/workflows/python-pr-check.yml) | Validação de PRs para projetos Python |\n| [`react-sandbox-web-build.yml`](.github/workflows/react-sandbox-web-build.yml) | Pipeline DevSecOps para frontends React — build, scans de segurança, upload de artefato |\n| [`react-sandbox-web-deploy-swa.yml`](.github/workflows/react-sandbox-web-deploy-swa.yml) | Deploy de artefato para **Azure Static Web Apps** + OWASP ZAP DAST |\n| [`react-pr-check.yml`](.github/workflows/react-pr-check.yml) | Validação de PRs para projetos React |\n| [`sandbox-console.yml`](.github/workflows/sandbox-console.yml) | Pipeline para aplicações console |\n\n---\n\n## Configuração do Repositório Caller\n\n\u003e **Pré-requisito:** Os **Environments** do GitHub (`DEV`, `HML`, `PRD` etc.) devem estar criados no repositório caller antes de executar qualquer pipeline de deploy. Acesse **Settings → Environments** e crie os ambientes correspondentes aos valores passados no input `environment`.\n\n### `dotnet-sandbox-api-build.yml`\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `GITLEAKS_LICENSE` | ✅ | Licença do GitLeaks |\n| `SNYK_TOKEN` | ✅ | Token de autenticação do Snyk |\n| `SONAR_TOKEN` | ✅ | Token de autenticação do SonarCloud |\n| `SONAR_PROJECT_KEY` | ✅ | Chave do projeto no SonarCloud |\n| `SAFETY_API_KEY` | ✅ | API Key do Safety CLI |\n| `REGISTRY_PASSWORD` | ⬜ | Senha/token do registry. Omita para `ghcr.io` (usa `GITHUB_TOKEN` automaticamente) |\n\n**Variables** (Settings → Secrets and variables → Actions → Variables):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `SONAR_ORGANIZATION` | ✅ | Slug da organização no SonarCloud |\n\n### `dotnet-sandbox-api-deploy-aca.yml`\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `AZURE_CLIENT_ID` | ✅ | Client ID do Service Principal Azure para autenticação OIDC |\n| `AZURE_TENANT_ID` | ✅ | Tenant ID do Azure AD para autenticação OIDC |\n| `AZURE_SUBSCRIPTION_ID` | ✅ | Subscription ID do Azure para autenticação OIDC |\n\n\u003e Os valores `azureRgBase` e `acaeBaseName` são passados como **inputs** do workflow caller (`with:`).\n\n### `python-sandbox-api-build.yml`\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `GITLEAKS_LICENSE` | ✅ | Licença do GitLeaks |\n| `GH_PACKAGES_TOKEN` | ✅ | Token do GitHub Packages para push de imagem |\n| `CODECOV_TOKEN` | ⬜ | Token do Codecov para upload de cobertura |\n| `BADGE_GIST_TOKEN` | ⬜ | Token do Gist para atualização do badge de CI/CD |\n| `REGISTRY_PASSWORD` | ⬜ | Senha/token do registry. Omita para `ghcr.io` (usa `GH_PACKAGES_TOKEN` automaticamente) |\n| `SONAR_TOKEN` | ⬜ | Token de autenticação do SonarCloud |\n| `SONAR_PROJECT_KEY` | ⬜ | Chave do projeto no SonarCloud |\n\n### `python-sandbox-api-deploy-aca.yml`\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `AZURE_CLIENT_ID` | ✅ | Client ID do Service Principal Azure para autenticação OIDC |\n| `AZURE_TENANT_ID` | ✅ | Tenant ID do Azure AD para autenticação OIDC |\n| `AZURE_SUBSCRIPTION_ID` | ✅ | Subscription ID do Azure para autenticação OIDC |\n\n\u003e Os valores `azureRgBase` e `acaeBaseName` são passados como **inputs** do workflow caller (`with:`).\n\n---\n\n### `react-sandbox-web-build.yml`\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `GITLEAKS_LICENSE` | ✅ | Licença do GitLeaks |\n| `BADGE_GIST_TOKEN` | ⬜ | Token do Gist para atualização do badge CI/CD (somente em `main`) |\n| `APPLICATIONINSIGHTS_CONNECTION_STRING` | ⬜ | Connection string do Application Insights (injetada no `.env`) |\n| `VITE_AUTH_API_KEY` | ⬜ | Chave de API de autenticação (usada em repositórios específicos) |\n| `SONAR_TOKEN` | ⬜ | Token de autenticação do SonarCloud |\n| `SONAR_PROJECT_KEY` | ⬜ | Chave do projeto no SonarCloud |\n\n**Variables** (Settings → Secrets and variables → Actions → Variables):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `BADGE_GIST_ID` | ⬜ | ID do Gist para o badge CI/CD |\n| `VITE_*` | ⬜ | Variáveis de ambiente do Vite (dependem do repositório e do environment) |\n\n---\n\n### `react-sandbox-web-deploy-swa.yml`\n\n\u003e **Pré-requisito:** O **Environment** GitHub (`DEV`, `HML`, `PRD` etc.) deve estar criado no repositório caller. As variáveis `AZURE_STATIC_WEBAPP_NAME` e `AZURE_RESOURCE_GROUP` devem ser definidas **dentro do Environment** correspondente.\n\n**Secrets** (Settings → Secrets and variables → Actions → Secrets):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `AZURE_CLIENT_ID` | ✅ | Client ID do Service Principal Azure para autenticação OIDC |\n| `AZURE_TENANT_ID` | ✅ | Tenant ID do Azure AD para autenticação OIDC |\n| `AZURE_SUBSCRIPTION_ID` | ✅ | Subscription ID do Azure para autenticação OIDC |\n| `AZURE_STATIC_WEB_APPS_API_TOKEN` | ✅ | Token de deploy do Azure Static Web Apps |\n| `BADGE_GIST_TOKEN` | ⬜ | Token do Gist para atualização do badge CI/CD |\n\n**Variables** (Settings → Secrets and variables → Actions → Variables):\n\n| Nome | Obrigatório | Descrição |\n|------|:-----------:|-----------|\n| `AZURE_STATIC_WEBAPP_NAME` | ✅* | Nome do recurso Azure Static Web App (necessário se `dist/config.json` tiver placeholders) |\n| `AZURE_RESOURCE_GROUP` | ✅* | Nome do Resource Group do Azure Static Web App (necessário se `dist/config.json` tiver placeholders) |\n\n\u003e \\* Obrigatório somente quando o arquivo `dist/config.json` do build contiver placeholders `{{ }}` que precisam ser preenchidos via app settings do Azure.\n\n---\n\n## Referências\n\n- [Spectral CLI](https://meta.stoplight.io/docs/spectral/9ffa04e052cc1-spectral-cli)\n- [dotnet test](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-test?tabs=dotnet-test-with-vstest)\n- [dotnet-coverage](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/dotnet-coverage)\n- [ReportGenerator](https://github.com/danielpalme/ReportGenerator) | [Usage](https://reportgenerator.io/usage)\n- [Unit Testing Code Coverage](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-code-coverage?tabs=linux)\n- [SonarCloud .NET Coverage Guide](https://community.sonarsource.com/t/coverage-troubleshooting-guide-for-net-code-coverage-import/37151)\n- [SonarQube .NET Test Coverage](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/test-coverage/dotnet-test-coverage/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipementel%2Fgh-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipementel%2Fgh-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipementel%2Fgh-actions/lists"}