{"id":19692508,"url":"https://github.com/mikeschulze/gdunit4-action","last_synced_at":"2025-06-23T03:37:04.631Z","repository":{"id":219614044,"uuid":"749330602","full_name":"MikeSchulze/gdUnit4-action","owner":"MikeSchulze","description":"🎮 Official GdUnit4 GitHub Action for automated testing in Godot 4.x projects. Supports GDScript \u0026 C#, test reporting, and CI/CD pipeline integration. Built for game developers to streamline their testing workflow.","archived":false,"fork":false,"pushed_at":"2025-06-09T10:11:23.000Z","size":162,"stargazers_count":39,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-11T22:46:24.873Z","etag":null,"topics":["ci-cd","game-development","gamedev","gdunit4","github-actions","godot","godot4","testing"],"latest_commit_sha":null,"homepage":"https://mikeschulze.github.io/gdUnit4/faq/ci/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MikeSchulze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.paypal.com/paypalme/GdUnit3"]}},"created_at":"2024-01-28T09:03:42.000Z","updated_at":"2025-05-29T07:48:57.000Z","dependencies_parsed_at":"2024-03-01T09:40:48.005Z","dependency_job_id":"d8186a2d-abda-459c-ab74-375f8e85c48e","html_url":"https://github.com/MikeSchulze/gdUnit4-action","commit_stats":null,"previous_names":["mikeschulze/gdunit4-action"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/MikeSchulze/gdUnit4-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSchulze%2FgdUnit4-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSchulze%2FgdUnit4-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSchulze%2FgdUnit4-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSchulze%2FgdUnit4-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MikeSchulze","download_url":"https://codeload.github.com/MikeSchulze/gdUnit4-action/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSchulze%2FgdUnit4-action/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261406023,"owners_count":23153669,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["ci-cd","game-development","gamedev","gdunit4","github-actions","godot","godot4","testing"],"created_at":"2024-11-11T19:13:37.545Z","updated_at":"2025-06-23T03:36:59.604Z","avatar_url":"https://github.com/MikeSchulze.png","language":"JavaScript","funding_links":["https://www.paypal.com/paypalme/GdUnit3"],"categories":[],"sub_categories":[],"readme":"# GdUnit4 Action\n\n\u003cdiv align=\"center\"\u003e\n\n[![License](https://img.shields.io/github/license/MikeSchulze/gdunit4-action)](https://github.com/MikeSchulze/gdunit4-action/blob/master/LICENSE)\n[![GitHub release badge](https://badgen.net/github/release/MikeSchulze/gdunit4-action/stable)](https://github.com/MikeSchulze/gdunit4-action/releases/latest)\n[![CI/CD](https://github.com/MikeSchulze/gdunit4-action/actions/workflows/ci-dev.yml/badge.svg)](https://github.com/MikeSchulze/gdunit4-action/actions/workflows/ci-master.yml)\n[![Discord](https://img.shields.io/discord/885149082119733269?label=discord)](https://img.shields.io/discord/885149082119733269)\n\n\u003c/div\u003e\n\nThis GitHub Action automates the execution of GdUnit4 (GDScript) and GdUnit4Net (CSharpScript) unit tests within the Godot Engine 4.x environment. It provides flexibility in configuring the Godot version, GdUnit4 version, test paths, and other parameters to suit your testing needs.\n\n## Table of Contents\n\n* [Requirements](#requirements)\n* [Quick Start](#quick-start)\n* [Usage](#usage)\n* [Configuration](#configuration)\n* [Examples](#examples)\n* [Troubleshooting](#troubleshooting)\n* [Performance Optimization](#performance-optimization)\n* [Contributing](#contributing)\n* [License](#license)\n* [Security](#security)\n* [FAQ](#faq)\n\n## Requirements\n\n### Godot Compatibility\n- Godot 4.x (4.0.0 and above)\n- Both standard and .NET versions supported\n- Tested with stable, RC, and dev builds\n\n### For C# Testing\n- .NET SDK 7.0 or 8.0\n- Godot .NET version\n\n### System Requirements\n- GitHub Actions runner (Ubuntu latest recommended)\n- Git with LFS support for larger projects\n\n## Quick Start\n\nBasic GDScript testing:\n```yaml\nname: GdUnit4 Tests\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: MikeSchulze/gdunit4-action@v1\n        with:\n          godot-version: '4.2.1'\n          paths: 'res://tests'\n```\n\n## Usage\n\nThe action can be configured using various inputs to suit your testing needs. Here's a basic usage pattern:\n\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n    godot-version: '4.2.1'       # Required: Godot version to use\n    paths: 'res://tests'         # Required: Test directory\n    timeout: 10                  # Optional: Test timeout in minutes\n    version: 'latest'            # Optional: GdUnit4 version\n```\n\n## Configuration\n\n### Essential Parameters\n\n| Parameter        | Required | Default | Description |\n|-----------------|----------|---------|-------------|\n| paths           | Yes      |         | Test directories (comma/newline-separated) |\n\n### Godot Configuration\n\n| Parameter        | Required | Default | Description                                 |\n|-----------------|----------|---------|---------------------------------------------|\n| godot-version   | Yes      |         | Godot version (e.g., \"4.2.1\")               |\n| godot-status    | No       | stable  | Godot status (stable/rc1/dev1)              |\n| godot-net       | No       | false   | Enable Godot .NET for C# tests              |\n| godot-force-mono| No       | false   | Force using Godot Net to run GDScript tests |\n\n### .NET Configuration\n\n| Parameter       | Required | Default | Description |\n|----------------|----------|---------|-------------|\n| dotnet-version | No       | net8.0  | .NET version (net7.0/net8.0) |\n\n### Test Configuration\n\n| Parameter       | Required | Default | Description                                  |\n|----------------|----------|---------|----------------------------------------------|\n| version        | No       | latest  | The GdUnit4 version to use (GDScript plugin) |\n| timeout        | No       | 10      | Test timeout (minutes)                       |\n| retries        | No       | 0       | Number of retry attempts                     |\n| arguments      | No       |         | Additional GdUnit4 arguments                 |\n| warnings-as-errors| No       | false   | Treat test warnings as errors |\n### Reporting Configuration\n\n| Parameter       | Required | Default | Description |\n|----------------|----------|---------|-------------|\n| publish-report | No       | true    | Enable test report publishing |\n| upload-report  | No       | true    | Enable report artifact upload |\n| report-name    | No       | test-report.xml | Report filename |\n\n## Examples\n\n### Basic GDScript Testing\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n    godot-version: '4.2.1'\n    paths: 'res://tests'\n```\n\n### Testing with Warnings threaded as Errors\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n     godot-version: '4.2.1'\n     paths: 'res://tests'\n     warnings-as-errors: true  # Fail the build on test warnings\n```\n\n### C# Testing with .NET 8.0\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n    godot-version: '4.2.1'\n    godot-net: true\n    paths: 'res://tests'\n```\n\n### Matrix Testing\n```yaml\njobs:\n  test:\n    strategy:\n      matrix:\n        godot-version: ['4.1.3', '4.2.1']\n        dotnet-version: ['net7.0', 'net8.0']\n    steps:\n      - uses: MikeSchulze/gdunit4-action@v1\n        with:\n          godot-version: ${{ matrix.godot-version }}\n          godot-net: true\n          dotnet-version: ${{ matrix.dotnet-version }}\n          paths: 'res://tests'\n```\n\n### Testing with Retries and Custom Arguments\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n    godot-version: '4.2.1'\n    paths: 'res://tests'\n    retries: 3\n    arguments: '--verbose --fail-fast'\n```\n\n### Custom Project Structure\nFor projects with non-standard layout:\n```bash\nroot/\n  ├── MyProject/\n  │   ├── src/\n  │   └── tests/\n```\n\n```yaml\n- uses: MikeSchulze/gdunit4-action@v1\n  with:\n    godot-version: '4.2.1'\n    project_dir: './MyProject/'\n    paths: 'res://tests'\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Test Discovery Failures**\n    - Ensure test paths are correct and use `res://` prefix\n    - Check file permissions on test directories\n\n2. **C# Test Issues**\n    - Verify correct .NET SDK version\n    - Check Godot .NET compatibility\n    - Ensure proper project structure\n\n3. **Timeout Issues**\n    - Increase timeout value for large test suites\n    - Consider splitting tests across multiple jobs\n\n### Debug Logging\nEnable verbose output by adding `--verbose` to the arguments:\n```yaml\narguments: '--verbose'\n```\n\n## Performance Optimization\n\n### Caching\nThe action automatically caches:\n- Godot binaries\n- .NET packages\n- Project cache\n\n### Best Practices\n1. Use specific versions instead of 'latest'\n2. Optimize test discovery paths\n3. Implement parallel test execution where possible\n4. Use appropriate timeout values\n\n## Security\n\n### Fork Considerations\nWhen running tests from forked repositories:\n1. Set `publish-report: false` to avoid permission issues\n2. Use custom `report-name` for artifact identification\n3. Be cautious with sensitive test data\n\n## FAQ\n\n### Q: Which Godot versions are supported?\nA: All Godot 4.x versions are supported, including stable, RC, and dev builds.\n\n### Q: Can I test both GDScript and C# in the same workflow?\nA: Yes, use separate jobs or matrix testing with different configurations.\n\n### Q: How do I handle flaky tests?\nA: Use the `retries` parameter to automatically retry failed tests.\n\n### Q: How do I handle test warnings?\nA: By default, warnings will be reported but won't fail the build. Use `warnings-as-errors: true` to treat warnings as failures.\n\n### Related Projects\n\n- [GdUnit4](https://github.com/MikeSchulze/gdUnit4)\n- [Godot Engine](https://godotengine.org)\n\n## Contributing\n\nWe welcome contributions! Please see our [contribution guidelines](CONTRIBUTING.md) for details.\n\n### You're Welcome To\n\n* [Give Feedback](https://github.com/MikeSchulze/gdunit4-action/discussions)\n* [Suggest Improvements](https://github.com/MikeSchulze/gdunit4-action/issues/new?assignees=MikeSchulze\u0026labels=enhancement\u0026template=feature_request.md\u0026title=)\n* [Report Bugs](https://github.com/MikeSchulze/gdunit4-action/issues/new?assignees=MikeSchulze\u0026labels=bug\u0026projects=projects%2F5\u0026template=bug_report.yml\u0026title=GD-XXX%3A+Describe+the+issue+briefly)\n* Join our [Discord Server](https://discord.gg/rdq36JwuaJ)\n\n## License\n\nThis project is released under the [MIT License](./LICENSE).\n\n## Contributors\n\n\u003ca href=\"https://github.com/MikeSchulze/gdUnit4-action/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=MikeSchulze/gdUnit4-action\" alt=\"Contributors\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeschulze%2Fgdunit4-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikeschulze%2Fgdunit4-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeschulze%2Fgdunit4-action/lists"}