mirror of
https://github.com/ivuorinen/gh-action-readme.git
synced 2026-02-13 19:49:20 +00:00
refactor: major codebase improvements and test framework overhaul
This commit represents a comprehensive refactoring of the codebase focused on improving code quality, testability, and maintainability. Key improvements: - Implement dependency injection and interface-based architecture - Add comprehensive test framework with fixtures and test suites - Fix all linting issues (errcheck, gosec, staticcheck, goconst, etc.) - Achieve full EditorConfig compliance across all files - Replace hardcoded test data with proper fixture files - Add configuration loader with hierarchical config support - Improve error handling with contextual information - Add progress indicators for better user feedback - Enhance Makefile with help system and improved editorconfig commands - Consolidate constants and remove deprecated code - Strengthen validation logic for GitHub Actions - Add focused consumer interfaces for better separation of concerns Testing improvements: - Add comprehensive integration tests - Implement test executor pattern for better test organization - Create extensive YAML fixture library for testing - Fix all failing tests and improve test coverage - Add validation test fixtures to avoid embedded YAML in Go files Build and tooling: - Update Makefile to show help by default - Fix editorconfig commands to use eclint properly - Add comprehensive help documentation to all make targets - Improve file selection patterns to avoid glob errors This refactoring maintains backward compatibility while significantly improving the internal architecture and developer experience.
This commit is contained in:
308
testdata/composite-action/README.md
vendored
308
testdata/composite-action/README.md
vendored
@@ -1,308 +0,0 @@
|
||||
# Composite Example Action
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/badge/icon-package-blue" alt="package" />
|
||||
<img src="https://img.shields.io/badge/status-stable-brightgreen" alt="Status" />
|
||||
<img src="https://img.shields.io/badge/license-MIT-blue" alt="License" />
|
||||
</div>
|
||||
|
||||
|
||||
## Overview
|
||||
|
||||
Test Composite Action for gh-action-readme dependency analysis
|
||||
|
||||
This GitHub Action provides a robust solution for your CI/CD pipeline with comprehensive configuration options and detailed output information.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Quick Start](#quick-start)
|
||||
- [Configuration](#configuration)
|
||||
- [Input Parameters](#input-parameters)
|
||||
- [Output Parameters](#output-parameters)
|
||||
- [Examples](#examples)
|
||||
- [Dependencies](#-dependencies)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [Contributing](#contributing)
|
||||
- [License](#license)
|
||||
|
||||
## Quick Start
|
||||
|
||||
Add the following step to your GitHub Actions workflow:
|
||||
|
||||
```yaml
|
||||
name: CI/CD Pipeline
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Composite Example Action
|
||||
uses: your-org/ @v1
|
||||
with:
|
||||
node-version: "20"
|
||||
working-directory: "."
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
This action supports various configuration options to customize its behavior according to your needs.
|
||||
|
||||
|
||||
### Input Parameters
|
||||
|
||||
| Parameter | Description | Type | Required | Default Value |
|
||||
|-----------|-------------|------|----------|---------------|
|
||||
| **`node-version`** | Node.js version to use | `string` | ❌ No | `20` |
|
||||
| **`working-directory`** | Working directory | `string` | ❌ No | `.` |
|
||||
|
||||
#### Parameter Details
|
||||
|
||||
|
||||
##### `node-version`
|
||||
|
||||
Node.js version to use
|
||||
|
||||
- **Type**: String
|
||||
- **Required**: No
|
||||
- **Default**: `20`
|
||||
|
||||
```yaml
|
||||
with:
|
||||
node-version: "20"
|
||||
```
|
||||
|
||||
|
||||
##### `working-directory`
|
||||
|
||||
Working directory
|
||||
|
||||
- **Type**: String
|
||||
- **Required**: No
|
||||
- **Default**: `.`
|
||||
|
||||
```yaml
|
||||
with:
|
||||
working-directory: "."
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Output Parameters
|
||||
|
||||
This action provides the following outputs that can be used in subsequent workflow steps:
|
||||
|
||||
| Parameter | Description | Usage |
|
||||
|-----------|-------------|-------|
|
||||
| **`build-result`** | Build result status | `\${{ steps. .outputs.build-result }}` |
|
||||
|
||||
#### Using Outputs
|
||||
|
||||
```yaml
|
||||
- name: Composite Example Action
|
||||
id: action-step
|
||||
uses: your-org/ @v1
|
||||
|
||||
- name: Use Output
|
||||
run: |
|
||||
echo "build-result: \${{ steps.action-step.outputs.build-result }}"
|
||||
```
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Usage
|
||||
|
||||
```yaml
|
||||
- name: Basic Composite Example Action
|
||||
uses: your-org/ @v1
|
||||
with:
|
||||
node-version: "20"
|
||||
working-directory: "."
|
||||
```
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
```yaml
|
||||
- name: Advanced Composite Example Action
|
||||
uses: your-org/ @v1
|
||||
with:
|
||||
node-version: "20"
|
||||
working-directory: "."
|
||||
env:
|
||||
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
### Conditional Usage
|
||||
|
||||
```yaml
|
||||
- name: Conditional Composite Example Action
|
||||
if: github.event_name == 'push'
|
||||
uses: your-org/ @v1
|
||||
with:
|
||||
node-version: "20"
|
||||
working-directory: "."
|
||||
```
|
||||
|
||||
|
||||
## 📦 Dependencies
|
||||
|
||||
This action uses the following dependencies:
|
||||
|
||||
| Action | Version | Author | Description |
|
||||
|--------|---------|--------|-------------|
|
||||
| [Checkout repository](https://github.com/marketplace/actions/checkout) | v4 | [actions](https://github.com/actions) | |
|
||||
| [Setup Node.js](https://github.com/marketplace/actions/setup-node) | v4 | [actions](https://github.com/actions) | |
|
||||
| Install dependencies | 🔒 | [ivuorinen](https://github.com/ivuorinen) | Shell script execution |
|
||||
| Run tests | 🔒 | [ivuorinen](https://github.com/ivuorinen) | Shell script execution |
|
||||
| [Build project](https://github.com/marketplace/actions/setup-node) | v4 | [actions](https://github.com/actions) | |
|
||||
|
||||
<details>
|
||||
<summary>📋 Dependency Details</summary>
|
||||
|
||||
|
||||
### Checkout repository @ v4
|
||||
|
||||
|
||||
- 📌 **Floating Version**: Using latest version (consider pinning for security)
|
||||
|
||||
- 👤 **Author**: [actions](https://github.com/actions)
|
||||
- 🏪 **Marketplace**: [View on GitHub Marketplace](https://github.com/marketplace/actions/checkout)
|
||||
- 📂 **Source**: [View Source](https://github.com/actions/checkout)
|
||||
|
||||
- **Configuration**:
|
||||
```yaml
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ github.token }}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Setup Node.js @ v4
|
||||
|
||||
|
||||
- 📌 **Floating Version**: Using latest version (consider pinning for security)
|
||||
|
||||
- 👤 **Author**: [actions](https://github.com/actions)
|
||||
- 🏪 **Marketplace**: [View on GitHub Marketplace](https://github.com/marketplace/actions/setup-node)
|
||||
- 📂 **Source**: [View Source](https://github.com/actions/setup-node)
|
||||
|
||||
- **Configuration**:
|
||||
```yaml
|
||||
with:
|
||||
cache: npm
|
||||
node-version: ${{ inputs.node-version }}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Install dependencies
|
||||
|
||||
|
||||
- 🔒 **Pinned Version**: Locked to specific version for security
|
||||
|
||||
- 👤 **Author**: [ivuorinen](https://github.com/ivuorinen)
|
||||
|
||||
- 📂 **Source**: [View Source](https://github.com/ivuorinen/gh-action-readme/blob/main/action.yml#L30)
|
||||
|
||||
|
||||
|
||||
### Run tests
|
||||
|
||||
|
||||
- 🔒 **Pinned Version**: Locked to specific version for security
|
||||
|
||||
- 👤 **Author**: [ivuorinen](https://github.com/ivuorinen)
|
||||
|
||||
- 📂 **Source**: [View Source](https://github.com/ivuorinen/gh-action-readme/blob/main/action.yml#L40)
|
||||
|
||||
|
||||
|
||||
### Build project @ v4
|
||||
|
||||
|
||||
- 📌 **Floating Version**: Using latest version (consider pinning for security)
|
||||
|
||||
- 👤 **Author**: [actions](https://github.com/actions)
|
||||
- 🏪 **Marketplace**: [View on GitHub Marketplace](https://github.com/marketplace/actions/setup-node)
|
||||
- 📂 **Source**: [View Source](https://github.com/actions/setup-node)
|
||||
|
||||
- **Configuration**:
|
||||
```yaml
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Same Repository Dependencies
|
||||
|
||||
- [Install dependencies](https://github.com/ivuorinen/gh-action-readme/blob/main/action.yml#L30) - Shell script execution
|
||||
|
||||
- [Run tests](https://github.com/ivuorinen/gh-action-readme/blob/main/action.yml#L40) - Shell script execution
|
||||
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Authentication Errors**: Ensure you have set up the required secrets in your repository settings.
|
||||
2. **Permission Issues**: Check that your GitHub token has the necessary permissions.
|
||||
3. **Configuration Errors**: Validate your input parameters against the schema.
|
||||
|
||||
### Getting Help
|
||||
|
||||
- Check the [action.yml](./action.yml) for the complete specification
|
||||
- Review the [examples](./examples/) directory for more use cases
|
||||
- Open an issue if you encounter problems
|
||||
|
||||
## Contributing
|
||||
|
||||
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
||||
|
||||
### Development Setup
|
||||
|
||||
1. Fork this repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Add tests if applicable
|
||||
5. Submit a pull request
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||
|
||||
## Support
|
||||
|
||||
If you find this action helpful, please consider:
|
||||
|
||||
- ⭐ Starring this repository
|
||||
- 🐛 Reporting issues
|
||||
- 💡 Suggesting improvements
|
||||
- 🤝 Contributing code
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<sub>📚 Documentation generated with <a href="https://github.com/ivuorinen/gh-action-readme">gh-action-readme</a></sub>
|
||||
</div>
|
||||
86
testdata/example-action/README.md
vendored
86
testdata/example-action/README.md
vendored
@@ -1,86 +0,0 @@
|
||||
# Example Action
|
||||
|
||||
  
|
||||
|
||||
> Test Action for gh-action-readme
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
```yaml
|
||||
name: My Workflow
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Example Action
|
||||
uses: ivuorinen/gh-action-readme/example-action@v1
|
||||
with:
|
||||
input1: "foo"
|
||||
input2: "value"
|
||||
```
|
||||
|
||||
|
||||
## 📥 Inputs
|
||||
|
||||
| Parameter | Description | Required | Default |
|
||||
|-----------|-------------|----------|---------|
|
||||
| `input1` | First input | ✅ | `foo` |
|
||||
| `input2` | Second input | ❌ | - |
|
||||
|
||||
|
||||
|
||||
## 📤 Outputs
|
||||
|
||||
| Parameter | Description |
|
||||
|-----------|-------------|
|
||||
| `result` | Result output |
|
||||
|
||||
|
||||
## 💡 Examples
|
||||
|
||||
<details>
|
||||
<summary>Basic Usage</summary>
|
||||
|
||||
```yaml
|
||||
- name: Example Action
|
||||
uses: ivuorinen/gh-action-readme/example-action@v1
|
||||
with:
|
||||
input1: "foo"
|
||||
input2: "example-value"
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Advanced Configuration</summary>
|
||||
|
||||
```yaml
|
||||
- name: Example Action with custom settings
|
||||
uses: ivuorinen/gh-action-readme/example-action@v1
|
||||
with:
|
||||
input1: "foo"
|
||||
input2: "custom-value"
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
## 🔧 Development
|
||||
|
||||
See the [action.yml](./action.yml) for the complete action specification.
|
||||
|
||||
## 📄 License
|
||||
|
||||
This action is distributed under the MIT License. See [LICENSE](LICENSE) for more information.
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<sub>🚀 Generated with <a href="https://github.com/ivuorinen/gh-action-readme">gh-action-readme</a></sub>
|
||||
</div>
|
||||
25
testdata/yaml-fixtures/actions/composite/basic.yml
vendored
Normal file
25
testdata/yaml-fixtures/actions/composite/basic.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: 'Basic Composite Action'
|
||||
description: 'A simple composite action with basic steps'
|
||||
inputs:
|
||||
working-directory:
|
||||
description: 'Working directory for commands'
|
||||
required: false
|
||||
default: '.'
|
||||
outputs:
|
||||
status:
|
||||
description: 'Overall status of the workflow'
|
||||
value: ${{ steps.final.outputs.status }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Setup
|
||||
run: echo "Setting up environment"
|
||||
shell: bash
|
||||
- name: Main task
|
||||
run: echo "Running main task in ${{ inputs.working-directory }}"
|
||||
shell: bash
|
||||
working-directory: ${{ inputs.working-directory }}
|
||||
- name: Final step
|
||||
id: final
|
||||
run: echo "status=success" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
93
testdata/yaml-fixtures/actions/composite/complex-workflow.yml
vendored
Normal file
93
testdata/yaml-fixtures/actions/composite/complex-workflow.yml
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
name: 'Complex Composite Workflow'
|
||||
description: 'A complex composite action demonstrating advanced features'
|
||||
inputs:
|
||||
environment:
|
||||
description: 'Target environment (dev, staging, prod)'
|
||||
required: true
|
||||
deploy:
|
||||
description: 'Whether to deploy after build'
|
||||
required: false
|
||||
default: 'false'
|
||||
slack-webhook:
|
||||
description: 'Slack webhook URL for notifications'
|
||||
required: false
|
||||
outputs:
|
||||
build-status:
|
||||
description: 'Build status'
|
||||
value: ${{ steps.build.outputs.status }}
|
||||
deploy-url:
|
||||
description: 'Deployment URL if deployed'
|
||||
value: ${{ steps.deploy.outputs.url }}
|
||||
artifact-url:
|
||||
description: 'URL to build artifacts'
|
||||
value: ${{ steps.upload.outputs.artifact-url }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Validate environment
|
||||
run: |
|
||||
if [[ ! "${{ inputs.environment }}" =~ ^(dev|staging|prod)$ ]]; then
|
||||
echo "Invalid environment: ${{ inputs.environment }}"
|
||||
exit 1
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Setup build environment
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
shell: bash
|
||||
|
||||
- name: Run linting
|
||||
run: npm run lint
|
||||
shell: bash
|
||||
|
||||
- name: Run tests
|
||||
run: npm run test:coverage
|
||||
shell: bash
|
||||
|
||||
- name: Build application
|
||||
id: build
|
||||
run: |
|
||||
npm run build:${{ inputs.environment }}
|
||||
echo "status=success" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
env:
|
||||
NODE_ENV: ${{ inputs.environment }}
|
||||
|
||||
- name: Upload build artifacts
|
||||
id: upload
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-${{ inputs.environment }}-${{ github.sha }}
|
||||
path: dist/
|
||||
retention-days: 30
|
||||
|
||||
- name: Deploy to environment
|
||||
id: deploy
|
||||
if: inputs.deploy == 'true'
|
||||
run: |
|
||||
echo "Deploying to ${{ inputs.environment }}"
|
||||
# Deployment logic would go here
|
||||
echo "url=https://${{ inputs.environment }}.example.com" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
- name: Notify Slack on success
|
||||
if: success() && inputs.slack-webhook != ''
|
||||
run: |
|
||||
curl -X POST -H 'Content-type: application/json' \
|
||||
--data '{"text":"✅ Deployment to ${{ inputs.environment }} successful"}' \
|
||||
${{ inputs.slack-webhook }}
|
||||
shell: bash
|
||||
|
||||
- name: Notify Slack on failure
|
||||
if: failure() && inputs.slack-webhook != ''
|
||||
run: |
|
||||
curl -X POST -H 'Content-type: application/json' \
|
||||
--data '{"text":"❌ Deployment to ${{ inputs.environment }} failed"}' \
|
||||
${{ inputs.slack-webhook }}
|
||||
shell: bash
|
||||
47
testdata/yaml-fixtures/actions/composite/with-dependencies.yml
vendored
Normal file
47
testdata/yaml-fixtures/actions/composite/with-dependencies.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: 'Composite Action with Dependencies'
|
||||
description: 'A composite action that uses external actions'
|
||||
inputs:
|
||||
node-version:
|
||||
description: 'Node.js version to setup'
|
||||
required: false
|
||||
default: '18'
|
||||
python-version:
|
||||
description: 'Python version to setup'
|
||||
required: false
|
||||
default: '3.9'
|
||||
outputs:
|
||||
node-path:
|
||||
description: 'Path to Node.js installation'
|
||||
value: ${{ steps.setup-node.outputs.node-path }}
|
||||
python-path:
|
||||
description: 'Path to Python installation'
|
||||
value: ${{ steps.setup-python.outputs.python-path }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Setup Node.js
|
||||
id: setup-node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ inputs.node-version }}
|
||||
cache: 'npm'
|
||||
- name: Setup Python
|
||||
id: setup-python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ inputs.python-version }}
|
||||
cache: 'pip'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
pip install -r requirements.txt
|
||||
shell: bash
|
||||
- name: Run tests
|
||||
run: |
|
||||
npm test
|
||||
python -m pytest
|
||||
shell: bash
|
||||
22
testdata/yaml-fixtures/actions/docker/basic.yml
vendored
Normal file
22
testdata/yaml-fixtures/actions/docker/basic.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: 'Basic Docker Action'
|
||||
description: 'A simple Docker-based action'
|
||||
inputs:
|
||||
command:
|
||||
description: 'Command to execute in the container'
|
||||
required: true
|
||||
args:
|
||||
description: 'Arguments for the command'
|
||||
required: false
|
||||
default: ''
|
||||
outputs:
|
||||
result:
|
||||
description: 'Result of the command execution'
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
args:
|
||||
- ${{ inputs.command }}
|
||||
- ${{ inputs.args }}
|
||||
branding:
|
||||
icon: 'package'
|
||||
color: 'blue'
|
||||
38
testdata/yaml-fixtures/actions/docker/with-environment.yml
vendored
Normal file
38
testdata/yaml-fixtures/actions/docker/with-environment.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
name: 'Docker Action with Environment'
|
||||
description: 'Docker action with environment variables and advanced configuration'
|
||||
inputs:
|
||||
dockerfile-path:
|
||||
description: 'Path to the Dockerfile'
|
||||
required: false
|
||||
default: 'Dockerfile'
|
||||
build-args:
|
||||
description: 'Build arguments for Docker build'
|
||||
required: false
|
||||
registry-url:
|
||||
description: 'Container registry URL'
|
||||
required: false
|
||||
username:
|
||||
description: 'Registry username'
|
||||
required: false
|
||||
password:
|
||||
description: 'Registry password'
|
||||
required: false
|
||||
outputs:
|
||||
image-digest:
|
||||
description: 'SHA digest of the built image'
|
||||
image-url:
|
||||
description: 'URL of the pushed image'
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: ${{ inputs.dockerfile-path }}
|
||||
env:
|
||||
REGISTRY_URL: ${{ inputs.registry-url }}
|
||||
REGISTRY_USERNAME: ${{ inputs.username }}
|
||||
REGISTRY_PASSWORD: ${{ inputs.password }}
|
||||
BUILD_ARGS: ${{ inputs.build-args }}
|
||||
args:
|
||||
- '--build-args'
|
||||
- ${{ inputs.build-args }}
|
||||
branding:
|
||||
icon: 'box'
|
||||
color: 'orange'
|
||||
9
testdata/yaml-fixtures/actions/invalid/invalid-using.yml
vendored
Normal file
9
testdata/yaml-fixtures/actions/invalid/invalid-using.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
name: 'Action with Invalid Using'
|
||||
description: 'Action with invalid runtime specification'
|
||||
inputs:
|
||||
test-input:
|
||||
description: 'A test input'
|
||||
required: true
|
||||
runs:
|
||||
using: 'invalid-runtime'
|
||||
main: 'index.js'
|
||||
12
testdata/yaml-fixtures/actions/invalid/malformed-yaml.yml
vendored
Normal file
12
testdata/yaml-fixtures/actions/invalid/malformed-yaml.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
name: 'Malformed YAML Action'
|
||||
description: 'Action with intentionally malformed YAML'
|
||||
inputs:
|
||||
test-input:
|
||||
description: 'A test input'
|
||||
# This creates invalid YAML due to incorrect indentation
|
||||
invalid-structure
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
# More invalid indentation
|
||||
extra-field: value
|
||||
8
testdata/yaml-fixtures/actions/invalid/missing-description.yml
vendored
Normal file
8
testdata/yaml-fixtures/actions/invalid/missing-description.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
name: 'Action Missing Description'
|
||||
inputs:
|
||||
test-input:
|
||||
description: 'A test input'
|
||||
required: true
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
9
testdata/yaml-fixtures/actions/invalid/missing-runs.yml
vendored
Normal file
9
testdata/yaml-fixtures/actions/invalid/missing-runs.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
name: 'Action Missing Runs'
|
||||
description: 'Action without required runs section'
|
||||
inputs:
|
||||
test-input:
|
||||
description: 'A test input'
|
||||
required: true
|
||||
branding:
|
||||
icon: 'alert-circle'
|
||||
color: 'red'
|
||||
23
testdata/yaml-fixtures/actions/javascript/node16.yml
vendored
Normal file
23
testdata/yaml-fixtures/actions/javascript/node16.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: 'Node.js 16 Action'
|
||||
description: 'JavaScript action running on Node.js 16'
|
||||
inputs:
|
||||
script-path:
|
||||
description: 'Path to the script to execute'
|
||||
required: true
|
||||
args:
|
||||
description: 'Arguments to pass to the script'
|
||||
required: false
|
||||
default: ''
|
||||
outputs:
|
||||
exit-code:
|
||||
description: 'Exit code of the script'
|
||||
stdout:
|
||||
description: 'Standard output from the script'
|
||||
runs:
|
||||
using: 'node16'
|
||||
main: 'dist/index.js'
|
||||
pre: 'dist/setup.js'
|
||||
post: 'dist/cleanup.js'
|
||||
branding:
|
||||
icon: 'terminal'
|
||||
color: 'green'
|
||||
19
testdata/yaml-fixtures/actions/javascript/simple.yml
vendored
Normal file
19
testdata/yaml-fixtures/actions/javascript/simple.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: 'Simple JavaScript Action'
|
||||
description: 'A simple JavaScript action for testing'
|
||||
inputs:
|
||||
message:
|
||||
description: 'Message to display'
|
||||
required: true
|
||||
level:
|
||||
description: 'Log level'
|
||||
required: false
|
||||
default: 'info'
|
||||
outputs:
|
||||
result:
|
||||
description: 'The result of the action'
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
branding:
|
||||
icon: 'activity'
|
||||
color: 'blue'
|
||||
36
testdata/yaml-fixtures/actions/javascript/with-all-fields.yml
vendored
Normal file
36
testdata/yaml-fixtures/actions/javascript/with-all-fields.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
name: 'Comprehensive JavaScript Action'
|
||||
description: 'A JavaScript action with all possible fields for testing'
|
||||
author: 'Test Author <test@example.com>'
|
||||
inputs:
|
||||
required-input:
|
||||
description: 'A required input parameter'
|
||||
required: true
|
||||
optional-input:
|
||||
description: 'An optional input parameter'
|
||||
required: false
|
||||
default: 'default-value'
|
||||
boolean-input:
|
||||
description: 'A boolean input parameter'
|
||||
required: false
|
||||
default: 'false'
|
||||
number-input:
|
||||
description: 'A numeric input parameter'
|
||||
required: false
|
||||
default: '42'
|
||||
outputs:
|
||||
success:
|
||||
description: 'Whether the action succeeded'
|
||||
message:
|
||||
description: 'Output message from the action'
|
||||
data:
|
||||
description: 'JSON data output'
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'dist/index.js'
|
||||
pre: 'dist/pre.js'
|
||||
post: 'dist/post.js'
|
||||
pre-if: 'always()'
|
||||
post-if: 'always()'
|
||||
branding:
|
||||
icon: 'check-circle'
|
||||
color: 'purple'
|
||||
7
testdata/yaml-fixtures/complex-global-config.yml
vendored
Normal file
7
testdata/yaml-fixtures/complex-global-config.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
theme: default
|
||||
output_format: md
|
||||
repo_overrides:
|
||||
test-repo:
|
||||
theme: github
|
||||
output_format: html
|
||||
verbose: true
|
||||
24
testdata/yaml-fixtures/composite-action.yml
vendored
Normal file
24
testdata/yaml-fixtures/composite-action.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: 'Composite Action'
|
||||
description: 'A composite action with multiple steps'
|
||||
inputs:
|
||||
working-directory:
|
||||
description: 'Working directory'
|
||||
required: false
|
||||
default: '.'
|
||||
outputs:
|
||||
result:
|
||||
description: 'The result of all steps'
|
||||
value: ${{ steps.final.outputs.result }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Setup
|
||||
run: echo "Setting up..."
|
||||
shell: bash
|
||||
- name: Build
|
||||
run: echo "Building..."
|
||||
shell: bash
|
||||
- name: Final step
|
||||
id: final
|
||||
run: echo "result=success" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
16
testdata/yaml-fixtures/composite-template.yml
vendored
Normal file
16
testdata/yaml-fixtures/composite-template.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
name: '{{ .Name }}'
|
||||
description: '{{ .Description }}'
|
||||
inputs:
|
||||
{{- range .Inputs }}
|
||||
{{ .Name }}:
|
||||
description: '{{ .Description }}'
|
||||
required: {{ .Required }}
|
||||
{{- end }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
{{- range .Steps }}
|
||||
- name: '{{ .Name }}'
|
||||
run: '{{ .Command }}'
|
||||
shell: bash
|
||||
{{- end }}
|
||||
17
testdata/yaml-fixtures/configs/global/comprehensive.yml
vendored
Normal file
17
testdata/yaml-fixtures/configs/global/comprehensive.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
theme: professional
|
||||
output_format: html
|
||||
output_dir: docs
|
||||
verbose: true
|
||||
quiet: false
|
||||
github_token: 'ghp_test_token_1234567890'
|
||||
analyze_dependencies: true
|
||||
show_security_info: true
|
||||
cache_duration: 3600
|
||||
max_concurrent_requests: 10
|
||||
repo_overrides:
|
||||
'example/repo':
|
||||
theme: github
|
||||
output_format: md
|
||||
'test/action':
|
||||
theme: minimal
|
||||
quiet: true
|
||||
6
testdata/yaml-fixtures/configs/global/default.yml
vendored
Normal file
6
testdata/yaml-fixtures/configs/global/default.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
theme: default
|
||||
output_format: md
|
||||
output_dir: .
|
||||
verbose: false
|
||||
quiet: false
|
||||
github_token: ''
|
||||
7
testdata/yaml-fixtures/configs/repo-specific/github-theme.yml
vendored
Normal file
7
testdata/yaml-fixtures/configs/repo-specific/github-theme.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
theme: github
|
||||
output_format: md
|
||||
output_dir: docs
|
||||
verbose: true
|
||||
quiet: false
|
||||
analyze_dependencies: true
|
||||
show_security_info: true
|
||||
15
testdata/yaml-fixtures/docker-action.yml
vendored
Normal file
15
testdata/yaml-fixtures/docker-action.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
name: 'Docker Action'
|
||||
description: 'A Docker-based GitHub Action'
|
||||
inputs:
|
||||
dockerfile:
|
||||
description: 'Path to Dockerfile'
|
||||
required: true
|
||||
default: 'Dockerfile'
|
||||
outputs:
|
||||
image-id:
|
||||
description: 'Built Docker image ID'
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
args:
|
||||
- ${{ inputs.dockerfile }}
|
||||
19
testdata/yaml-fixtures/dynamic-action-template.yml
vendored
Normal file
19
testdata/yaml-fixtures/dynamic-action-template.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: '{{ .Name }}'
|
||||
description: '{{ .Description }}'
|
||||
inputs:
|
||||
{{- range .Inputs }}
|
||||
{{ .Name }}:
|
||||
description: '{{ .Description }}'
|
||||
required: {{ .Required }}
|
||||
{{- if .Default }}
|
||||
default: '{{ .Default }}'
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
outputs:
|
||||
{{- range .Outputs }}
|
||||
{{ .Name }}:
|
||||
description: '{{ .Description }}'
|
||||
{{- end }}
|
||||
runs:
|
||||
using: '{{ .Runtime }}'
|
||||
main: '{{ .Main }}'
|
||||
3
testdata/yaml-fixtures/global-config.yml
vendored
Normal file
3
testdata/yaml-fixtures/global-config.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
theme: default
|
||||
output_format: md
|
||||
github_token: global-token
|
||||
8
testdata/yaml-fixtures/invalid-action.yml
vendored
Normal file
8
testdata/yaml-fixtures/invalid-action.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
name: 'Invalid Action'
|
||||
# Missing description field makes this invalid
|
||||
inputs:
|
||||
test-input:
|
||||
description: 'Test input'
|
||||
required: true
|
||||
runs:
|
||||
using: 'invalid-runtime'
|
||||
5
testdata/yaml-fixtures/minimal-action.yml
vendored
Normal file
5
testdata/yaml-fixtures/minimal-action.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
name: 'Minimal Action'
|
||||
description: 'Minimal test action'
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
2
testdata/yaml-fixtures/minimal-config.yml
vendored
Normal file
2
testdata/yaml-fixtures/minimal-config.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
theme: minimal
|
||||
github_token: config-token
|
||||
9
testdata/yaml-fixtures/my-new-action.yml
vendored
Normal file
9
testdata/yaml-fixtures/my-new-action.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
name: 'My New Action'
|
||||
description: 'A brand new GitHub Action'
|
||||
inputs:
|
||||
message:
|
||||
description: 'Message to display'
|
||||
required: true
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
16
testdata/yaml-fixtures/package.json
vendored
Normal file
16
testdata/yaml-fixtures/package.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "test-action",
|
||||
"version": "1.0.0",
|
||||
"description": "Test action package",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0",
|
||||
"@actions/github": "^5.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.0.0"
|
||||
}
|
||||
}
|
||||
8
testdata/yaml-fixtures/professional-config.yml
vendored
Normal file
8
testdata/yaml-fixtures/professional-config.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
theme: professional
|
||||
output_format: html
|
||||
output_dir: docs
|
||||
template: custom-template.tmpl
|
||||
schema: custom-schema.json
|
||||
verbose: true
|
||||
quiet: false
|
||||
github_token: test-token-from-config
|
||||
7
testdata/yaml-fixtures/repo-config.yml
vendored
Normal file
7
testdata/yaml-fixtures/repo-config.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
theme: github
|
||||
output_format: md
|
||||
output_dir: docs
|
||||
verbose: true
|
||||
quiet: false
|
||||
analyze_dependencies: true
|
||||
show_security_info: true
|
||||
196
testdata/yaml-fixtures/scenarios/test-scenarios.yml
vendored
Normal file
196
testdata/yaml-fixtures/scenarios/test-scenarios.yml
vendored
Normal file
@@ -0,0 +1,196 @@
|
||||
scenarios:
|
||||
# JavaScript Action Scenarios
|
||||
- id: "simple-javascript"
|
||||
name: "Simple JavaScript Action"
|
||||
description: "Basic JavaScript action with minimal configuration"
|
||||
action_type: "javascript"
|
||||
fixture: "actions/javascript/simple.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["javascript", "basic", "valid", "node20"]
|
||||
metadata:
|
||||
node_version: "20"
|
||||
has_branding: true
|
||||
input_count: 2
|
||||
output_count: 1
|
||||
|
||||
- id: "node16-javascript"
|
||||
name: "Node.js 16 JavaScript Action"
|
||||
description: "JavaScript action running on Node.js 16"
|
||||
action_type: "javascript"
|
||||
fixture: "actions/javascript/node16.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["javascript", "node16", "valid", "pre-post"]
|
||||
metadata:
|
||||
node_version: "16"
|
||||
has_pre: true
|
||||
has_post: true
|
||||
|
||||
- id: "comprehensive-javascript"
|
||||
name: "Comprehensive JavaScript Action"
|
||||
description: "JavaScript action with all possible fields"
|
||||
action_type: "javascript"
|
||||
fixture: "actions/javascript/with-all-fields.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["javascript", "comprehensive", "valid", "node20"]
|
||||
metadata:
|
||||
has_author: true
|
||||
has_pre_post: true
|
||||
input_count: 4
|
||||
output_count: 3
|
||||
|
||||
# Composite Action Scenarios
|
||||
- id: "basic-composite"
|
||||
name: "Basic Composite Action"
|
||||
description: "Simple composite action with basic shell steps"
|
||||
action_type: "composite"
|
||||
fixture: "actions/composite/basic.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["composite", "basic", "valid", "shell"]
|
||||
metadata:
|
||||
step_count: 3
|
||||
has_outputs: true
|
||||
|
||||
- id: "composite-with-deps"
|
||||
name: "Composite Action with Dependencies"
|
||||
description: "Composite action using external GitHub actions"
|
||||
action_type: "composite"
|
||||
fixture: "actions/composite/with-dependencies.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["composite", "dependencies", "valid", "external-actions"]
|
||||
metadata:
|
||||
external_actions: ["actions/checkout@v4", "actions/setup-node@v4", "actions/setup-python@v4"]
|
||||
step_count: 6
|
||||
|
||||
- id: "complex-composite"
|
||||
name: "Complex Composite Workflow"
|
||||
description: "Advanced composite action with conditional steps and notifications"
|
||||
action_type: "composite"
|
||||
fixture: "actions/composite/complex-workflow.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["composite", "complex", "valid", "conditional", "notifications"]
|
||||
metadata:
|
||||
step_count: 9
|
||||
has_conditionals: true
|
||||
has_env_vars: true
|
||||
|
||||
# Docker Action Scenarios
|
||||
- id: "basic-docker"
|
||||
name: "Basic Docker Action"
|
||||
description: "Simple Docker-based action"
|
||||
action_type: "docker"
|
||||
fixture: "actions/docker/basic.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["docker", "basic", "valid", "dockerfile"]
|
||||
metadata:
|
||||
uses_dockerfile: true
|
||||
has_args: true
|
||||
|
||||
- id: "docker-with-env"
|
||||
name: "Docker Action with Environment"
|
||||
description: "Docker action with environment variables and registry configuration"
|
||||
action_type: "docker"
|
||||
fixture: "actions/docker/with-environment.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["docker", "environment", "valid", "registry"]
|
||||
metadata:
|
||||
has_env_vars: true
|
||||
has_registry_config: true
|
||||
|
||||
# Invalid Action Scenarios
|
||||
- id: "missing-description"
|
||||
name: "Invalid Action - Missing Description"
|
||||
description: "Action missing required description field"
|
||||
action_type: "invalid"
|
||||
fixture: "actions/invalid/missing-description.yml"
|
||||
expect_valid: false
|
||||
expect_error: true
|
||||
tags: ["invalid", "validation", "error", "missing-field"]
|
||||
metadata:
|
||||
missing_fields: ["description"]
|
||||
|
||||
- id: "invalid-using"
|
||||
name: "Invalid Action - Invalid Runtime"
|
||||
description: "Action with invalid runtime specification"
|
||||
action_type: "invalid"
|
||||
fixture: "actions/invalid/invalid-using.yml"
|
||||
expect_valid: false
|
||||
expect_error: true
|
||||
tags: ["invalid", "validation", "error", "invalid-runtime"]
|
||||
metadata:
|
||||
invalid_runtime: "invalid-runtime"
|
||||
|
||||
- id: "malformed-yaml"
|
||||
name: "Invalid Action - Malformed YAML"
|
||||
description: "Action with malformed YAML syntax"
|
||||
action_type: "invalid"
|
||||
fixture: "actions/invalid/malformed-yaml.yml"
|
||||
expect_valid: false
|
||||
expect_error: true
|
||||
tags: ["invalid", "yaml-error", "syntax-error"]
|
||||
metadata:
|
||||
yaml_error: true
|
||||
|
||||
- id: "missing-runs"
|
||||
name: "Invalid Action - Missing Runs"
|
||||
description: "Action missing required runs section"
|
||||
action_type: "invalid"
|
||||
fixture: "actions/invalid/missing-runs.yml"
|
||||
expect_valid: false
|
||||
expect_error: true
|
||||
tags: ["invalid", "validation", "error", "missing-runs"]
|
||||
metadata:
|
||||
missing_fields: ["runs"]
|
||||
|
||||
# Legacy Fixture Mappings (for backward compatibility)
|
||||
- id: "legacy-simple"
|
||||
name: "Legacy Simple Action"
|
||||
description: "Backward compatibility mapping for SimpleActionYML"
|
||||
action_type: "javascript"
|
||||
fixture: "simple-action.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["legacy", "javascript", "valid"]
|
||||
|
||||
- id: "legacy-composite"
|
||||
name: "Legacy Composite Action"
|
||||
description: "Backward compatibility mapping for CompositeActionYML"
|
||||
action_type: "composite"
|
||||
fixture: "composite-action.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["legacy", "composite", "valid"]
|
||||
|
||||
- id: "legacy-docker"
|
||||
name: "Legacy Docker Action"
|
||||
description: "Backward compatibility mapping for DockerActionYML"
|
||||
action_type: "docker"
|
||||
fixture: "docker-action.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["legacy", "docker", "valid"]
|
||||
|
||||
- id: "legacy-minimal"
|
||||
name: "Legacy Minimal Action"
|
||||
description: "Backward compatibility mapping for MinimalActionYML"
|
||||
action_type: "minimal"
|
||||
fixture: "minimal-action.yml"
|
||||
expect_valid: true
|
||||
expect_error: false
|
||||
tags: ["legacy", "minimal", "valid"]
|
||||
|
||||
- id: "legacy-invalid"
|
||||
name: "Legacy Invalid Action"
|
||||
description: "Backward compatibility mapping for InvalidActionYML"
|
||||
action_type: "invalid"
|
||||
fixture: "invalid-action.yml"
|
||||
expect_valid: false
|
||||
expect_error: true
|
||||
tags: ["legacy", "invalid", "error"]
|
||||
13
testdata/yaml-fixtures/simple-action.yml
vendored
Normal file
13
testdata/yaml-fixtures/simple-action.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
name: 'Simple Action'
|
||||
description: 'A simple GitHub Action for testing'
|
||||
inputs:
|
||||
name:
|
||||
description: 'Name to greet'
|
||||
required: true
|
||||
default: 'World'
|
||||
outputs:
|
||||
greeting:
|
||||
description: 'The greeting message'
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
11
testdata/yaml-fixtures/test-composite-action.yml
vendored
Normal file
11
testdata/yaml-fixtures/test-composite-action.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
name: 'Test Composite Action'
|
||||
description: 'Test action for update testing'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v3.8.0
|
||||
with:
|
||||
node-version: '18'
|
||||
20
testdata/yaml-fixtures/test-project-action.yml
vendored
Normal file
20
testdata/yaml-fixtures/test-project-action.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: 'Test Project Action'
|
||||
description: 'A GitHub Action for testing project functionality'
|
||||
inputs:
|
||||
project-path:
|
||||
description: 'Path to the project directory'
|
||||
required: true
|
||||
default: '.'
|
||||
test-command:
|
||||
description: 'Command to run tests'
|
||||
required: false
|
||||
default: 'npm test'
|
||||
outputs:
|
||||
test-results:
|
||||
description: 'Test execution results'
|
||||
runs:
|
||||
using: 'node20'
|
||||
main: 'dist/index.js'
|
||||
branding:
|
||||
icon: 'check-circle'
|
||||
color: 'green'
|
||||
1
testdata/yaml-fixtures/validation/invalid-yaml.yml
vendored
Normal file
1
testdata/yaml-fixtures/validation/invalid-yaml.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
invalid: yaml: content:
|
||||
3
testdata/yaml-fixtures/validation/missing-description.yml
vendored
Normal file
3
testdata/yaml-fixtures/validation/missing-description.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
name: Test Action
|
||||
runs:
|
||||
using: node20
|
||||
3
testdata/yaml-fixtures/validation/missing-name.yml
vendored
Normal file
3
testdata/yaml-fixtures/validation/missing-name.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
description: A test action
|
||||
runs:
|
||||
using: node20
|
||||
2
testdata/yaml-fixtures/validation/missing-runs.yml
vendored
Normal file
2
testdata/yaml-fixtures/validation/missing-runs.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
name: Test Action
|
||||
description: A test action
|
||||
4
testdata/yaml-fixtures/validation/valid-action.yml
vendored
Normal file
4
testdata/yaml-fixtures/validation/valid-action.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
name: Test Action
|
||||
description: A test action
|
||||
runs:
|
||||
using: node20
|
||||
Reference in New Issue
Block a user