# ivuorinen/actions - My Reusable GitHub Actions and Workflows ## Overview This repository contains a collection of reusable GitHub Actions designed to streamline CI/CD processes and ensure code quality. Each action is fully self-contained and can be used independently in any GitHub repository. ### Key Features - **Production-Ready Actions** covering setup, linting, building, testing, and deployment - **Self-Contained Design** - each action works independently without dependencies - **External Usage Ready** - use any action with pinned refs: `ivuorinen/actions/action-name@2025-01-15` or `@` for supply-chain security - **Multi-Language Support** including Node.js, PHP, Python, Go, C#, and more - **Standardized Patterns** with consistent error handling and input/output interfaces - **Comprehensive Testing** with dual testing framework (ShellSpec + pytest) - **Modular Build System** using Makefile for development and maintenance ## ๐Ÿ“š Action Catalog This repository contains **43 reusable GitHub Actions** for CI/CD automation. ### Quick Reference (43 Actions) | Icon | Action | Category | Description | Key Features | |:----:|:-------------------------------------------------------|:-----------|:----------------------------------------------------------------|:---------------------------------------------| | ๐Ÿ“ฆ | [`ansible-lint-fix`][ansible-lint-fix] | Linting | Lints and fixes Ansible playbooks, commits changes, and uplo... | Token auth, Outputs | | โœ… | [`biome-check`][biome-check] | Linting | Run Biome check on the repository | Token auth, Outputs | | โœ… | [`biome-fix`][biome-fix] | Linting | Run Biome fix on the repository | Token auth, Outputs | | ๐Ÿ›ก๏ธ | [`codeql-analysis`][codeql-analysis] | Other | Run CodeQL security analysis for a single language with conf... | Auto-detection, Token auth, Outputs | | ๐Ÿ’พ | [`common-cache`][common-cache] | Repository | Standardized caching strategy for all actions | Caching, Outputs | | ๐Ÿ“ฆ | [`common-file-check`][common-file-check] | Repository | A reusable action to check if a specific file or type of fil... | Outputs | | ๐Ÿ”„ | [`common-retry`][common-retry] | Repository | Standardized retry utility for network operations and flaky ... | Outputs | | ๐Ÿ–ผ๏ธ | [`compress-images`][compress-images] | Repository | Compress images on demand (workflow_dispatch), and at 11pm e... | Token auth, Outputs | | ๐Ÿ“ | [`csharp-build`][csharp-build] | Build | Builds and tests C# projects. | Auto-detection, Outputs | | ๐Ÿ“ | [`csharp-lint-check`][csharp-lint-check] | Linting | Runs linters like StyleCop or dotnet-format for C# code styl... | Auto-detection, Outputs | | ๐Ÿ“ฆ | [`csharp-publish`][csharp-publish] | Publishing | Publishes a C# project to GitHub Packages. | Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ | [`docker-build`][docker-build] | Build | Builds a Docker image for multiple architectures with enhanc... | Caching, Auto-detection, Token auth, Outputs | | โ˜๏ธ | [`docker-publish`][docker-publish] | Publishing | Publish a Docker image to GitHub Packages and Docker Hub. | Auto-detection, Outputs | | ๐Ÿ“ฆ | [`docker-publish-gh`][docker-publish-gh] | Publishing | Publishes a Docker image to GitHub Packages with advanced se... | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ | [`docker-publish-hub`][docker-publish-hub] | Publishing | Publishes a Docker image to Docker Hub with enhanced securit... | Caching, Auto-detection, Outputs | | ๐Ÿ“ | [`dotnet-version-detect`][dotnet-version-detect] | Setup | Detects .NET SDK version from global.json or defaults to a s... | Auto-detection, Outputs | | โœ… | [`eslint-check`][eslint-check] | Linting | Run ESLint check on the repository with advanced configurati... | Caching, Outputs | | ๐Ÿ“ | [`eslint-fix`][eslint-fix] | Linting | Fixes ESLint violations in a project. | Token auth, Outputs | | ๐Ÿท๏ธ | [`github-release`][github-release] | Repository | Creates a GitHub release with a version and changelog. | Outputs | | ๐Ÿ“ฆ | [`go-build`][go-build] | Build | Builds the Go project. | Caching, Auto-detection, Outputs | | ๐Ÿ“ | [`go-lint`][go-lint] | Linting | Run golangci-lint with advanced configuration, caching, and ... | Caching, Outputs | | ๐Ÿ“ | [`go-version-detect`][go-version-detect] | Setup | Detects the Go version from the project's go.mod file or def... | Auto-detection, Outputs | | ๐Ÿ–ฅ๏ธ | [`node-setup`][node-setup] | Setup | Sets up Node.js env with advanced version management, cachin... | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ | [`npm-publish`][npm-publish] | Publishing | Publishes the package to the NPM registry with configurable ... | Outputs | | ๐Ÿ–ฅ๏ธ | [`php-composer`][php-composer] | Testing | Runs Composer install on a repository with advanced caching ... | Auto-detection, Token auth, Outputs | | ๐Ÿ’ป | [`php-laravel-phpunit`][php-laravel-phpunit] | Testing | Setup PHP, install dependencies, generate key, create databa... | Auto-detection, Token auth, Outputs | | โœ… | [`php-tests`][php-tests] | Testing | Run PHPUnit tests on the repository | Token auth, Outputs | | ๐Ÿ“ | [`php-version-detect`][php-version-detect] | Setup | Detects the PHP version from the project's composer.json, ph... | Auto-detection, Outputs | | โœ… | [`pr-lint`][pr-lint] | Linting | Runs MegaLinter against pull requests | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ | [`pre-commit`][pre-commit] | Linting | Runs pre-commit on the repository and pushes the fixes back ... | Auto-detection, Token auth, Outputs | | โœ… | [`prettier-check`][prettier-check] | Linting | Run Prettier check on the repository with advanced configura... | Caching, Outputs | | ๐Ÿ“ | [`prettier-fix`][prettier-fix] | Linting | Run Prettier to fix code style violations | Token auth, Outputs | | ๐Ÿ“ | [`python-lint-fix`][python-lint-fix] | Linting | Lints and fixes Python files, commits changes, and uploads S... | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ | [`python-version-detect`][python-version-detect] | Setup | Detects Python version from project configuration files or d... | Auto-detection, Outputs | | ๐Ÿ“ | [`python-version-detect-v2`][python-version-detect-v2] | Setup | Detects Python version from project configuration files usin... | Auto-detection, Outputs | | ๐Ÿ“ฆ | [`release-monthly`][release-monthly] | Repository | Creates a release for the current month, incrementing patch ... | Token auth, Outputs | | ๐Ÿ”€ | [`set-git-config`][set-git-config] | Setup | Sets Git configuration for actions. | Token auth, Outputs | | ๐Ÿ“ฆ | [`stale`][stale] | Repository | A GitHub Action to close stale issues and pull requests. | Token auth, Outputs | | ๐Ÿท๏ธ | [`sync-labels`][sync-labels] | Repository | Sync labels from a YAML file to a GitHub repository | Token auth, Outputs | | ๐Ÿ–ฅ๏ธ | [`terraform-lint-fix`][terraform-lint-fix] | Linting | Lints and fixes Terraform files with advanced validation and... | Token auth, Outputs | | ๐Ÿ›ก๏ธ | [`validate-inputs`][validate-inputs] | Other | Centralized Python-based input validation for GitHub Actions... | Token auth, Outputs | | ๐Ÿ“ฆ | [`version-file-parser`][version-file-parser] | Utilities | Universal parser for common version detection files (.tool-v... | Auto-detection, Outputs | | โœ… | [`version-validator`][version-validator] | Utilities | Validates and normalizes version strings using customizable ... | Auto-detection, Outputs | ### Actions by Category #### ๐Ÿ”ง Setup (7 actions) | Action | Description | Languages | Features | |:----------------------------------------------------------|:------------------------------------------------------|:--------------------------------|:---------------------------------------------| | ๐Ÿ“ [`dotnet-version-detect`][dotnet-version-detect] | Detects .NET SDK version from global.json or defau... | C#, .NET | Auto-detection, Outputs | | ๐Ÿ“ [`go-version-detect`][go-version-detect] | Detects the Go version from the project's go.mod f... | Go | Auto-detection, Outputs | | ๐Ÿ–ฅ๏ธ [`node-setup`][node-setup] | Sets up Node.js env with advanced version manageme... | Node.js, JavaScript, TypeScript | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ [`php-version-detect`][php-version-detect] | Detects the PHP version from the project's compose... | PHP | Auto-detection, Outputs | | ๐Ÿ“ [`python-version-detect`][python-version-detect] | Detects Python version from project configuration ... | Python | Auto-detection, Outputs | | ๐Ÿ“ [`python-version-detect-v2`][python-version-detect-v2] | Detects Python version from project configuration ... | Python | Auto-detection, Outputs | | ๐Ÿ”€ [`set-git-config`][set-git-config] | Sets Git configuration for actions. | - | Token auth, Outputs | #### ๐Ÿ› ๏ธ Utilities (2 actions) | Action | Description | Languages | Features | |:------------------------------------------------|:------------------------------------------------------|:----------|:------------------------| | ๐Ÿ“ฆ [`version-file-parser`][version-file-parser] | Universal parser for common version detection file... | - | Auto-detection, Outputs | | โœ… [`version-validator`][version-validator] | Validates and normalizes version strings using cus... | - | Auto-detection, Outputs | #### ๐Ÿ“ Linting (13 actions) | Action | Description | Languages | Features | |:-----------------------------------------------|:------------------------------------------------------|:---------------------------------------------|:---------------------------------------------| | ๐Ÿ“ฆ [`ansible-lint-fix`][ansible-lint-fix] | Lints and fixes Ansible playbooks, commits changes... | Ansible, YAML | Token auth, Outputs | | โœ… [`biome-check`][biome-check] | Run Biome check on the repository | JavaScript, TypeScript, JSON | Token auth, Outputs | | โœ… [`biome-fix`][biome-fix] | Run Biome fix on the repository | JavaScript, TypeScript, JSON | Token auth, Outputs | | ๐Ÿ“ [`csharp-lint-check`][csharp-lint-check] | Runs linters like StyleCop or dotnet-format for C#... | C#, .NET | Auto-detection, Outputs | | โœ… [`eslint-check`][eslint-check] | Run ESLint check on the repository with advanced c... | JavaScript, TypeScript | Caching, Outputs | | ๐Ÿ“ [`eslint-fix`][eslint-fix] | Fixes ESLint violations in a project. | JavaScript, TypeScript | Token auth, Outputs | | ๐Ÿ“ [`go-lint`][go-lint] | Run golangci-lint with advanced configuration, cac... | Go | Caching, Outputs | | โœ… [`pr-lint`][pr-lint] | Runs MegaLinter against pull requests | - | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ [`pre-commit`][pre-commit] | Runs pre-commit on the repository and pushes the f... | - | Auto-detection, Token auth, Outputs | | โœ… [`prettier-check`][prettier-check] | Run Prettier check on the repository with advanced... | JavaScript, TypeScript, Markdown, YAML, JSON | Caching, Outputs | | ๐Ÿ“ [`prettier-fix`][prettier-fix] | Run Prettier to fix code style violations | JavaScript, TypeScript, Markdown, YAML, JSON | Token auth, Outputs | | ๐Ÿ“ [`python-lint-fix`][python-lint-fix] | Lints and fixes Python files, commits changes, and... | Python | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ–ฅ๏ธ [`terraform-lint-fix`][terraform-lint-fix] | Lints and fixes Terraform files with advanced vali... | Terraform, HCL | Token auth, Outputs | #### ๐Ÿงช Testing (3 actions) | Action | Description | Languages | Features | |:------------------------------------------------|:------------------------------------------------------|:-------------|:------------------------------------| | ๐Ÿ–ฅ๏ธ [`php-composer`][php-composer] | Runs Composer install on a repository with advance... | PHP | Auto-detection, Token auth, Outputs | | ๐Ÿ’ป [`php-laravel-phpunit`][php-laravel-phpunit] | Setup PHP, install dependencies, generate key, cre... | PHP, Laravel | Auto-detection, Token auth, Outputs | | โœ… [`php-tests`][php-tests] | Run PHPUnit tests on the repository | PHP | Token auth, Outputs | #### ๐Ÿ—๏ธ Build (3 actions) | Action | Description | Languages | Features | |:----------------------------------|:------------------------------------------------------|:----------|:---------------------------------------------| | ๐Ÿ“ [`csharp-build`][csharp-build] | Builds and tests C# projects. | C#, .NET | Auto-detection, Outputs | | ๐Ÿ“ฆ [`docker-build`][docker-build] | Builds a Docker image for multiple architectures w... | Docker | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ [`go-build`][go-build] | Builds the Go project. | Go | Caching, Auto-detection, Outputs | #### ๐Ÿš€ Publishing (5 actions) | Action | Description | Languages | Features | |:----------------------------------------------|:------------------------------------------------------|:-------------|:---------------------------------------------| | ๐Ÿ“ฆ [`csharp-publish`][csharp-publish] | Publishes a C# project to GitHub Packages. | C#, .NET | Auto-detection, Token auth, Outputs | | โ˜๏ธ [`docker-publish`][docker-publish] | Publish a Docker image to GitHub Packages and Dock... | Docker | Auto-detection, Outputs | | ๐Ÿ“ฆ [`docker-publish-gh`][docker-publish-gh] | Publishes a Docker image to GitHub Packages with a... | Docker | Caching, Auto-detection, Token auth, Outputs | | ๐Ÿ“ฆ [`docker-publish-hub`][docker-publish-hub] | Publishes a Docker image to Docker Hub with enhanc... | Docker | Caching, Auto-detection, Outputs | | ๐Ÿ“ฆ [`npm-publish`][npm-publish] | Publishes the package to the NPM registry with con... | Node.js, npm | Outputs | #### ๐Ÿ“ฆ Repository (8 actions) | Action | Description | Languages | Features | |:--------------------------------------------|:------------------------------------------------------|:----------|:--------------------| | ๐Ÿ’พ [`common-cache`][common-cache] | Standardized caching strategy for all actions | - | Caching, Outputs | | ๐Ÿ“ฆ [`common-file-check`][common-file-check] | A reusable action to check if a specific file or t... | - | Outputs | | ๐Ÿ”„ [`common-retry`][common-retry] | Standardized retry utility for network operations ... | - | Outputs | | ๐Ÿ–ผ๏ธ [`compress-images`][compress-images] | Compress images on demand (workflow_dispatch), and... | - | Token auth, Outputs | | ๐Ÿท๏ธ [`github-release`][github-release] | Creates a GitHub release with a version and change... | - | Outputs | | ๐Ÿ“ฆ [`release-monthly`][release-monthly] | Creates a release for the current month, increment... | - | Token auth, Outputs | | ๐Ÿ“ฆ [`stale`][stale] | A GitHub Action to close stale issues and pull req... | - | Token auth, Outputs | | ๐Ÿท๏ธ [`sync-labels`][sync-labels] | Sync labels from a YAML file to a GitHub repositor... | - | Token auth, Outputs | ### Feature Matrix | Action | Caching | Auto-detection | Token auth | Outputs | |:-------------------------------------------------------|:-------:|:--------------:|:----------:|:-------:| | [`ansible-lint-fix`][ansible-lint-fix] | - | - | โœ… | โœ… | | [`biome-check`][biome-check] | - | - | โœ… | โœ… | | [`biome-fix`][biome-fix] | - | - | โœ… | โœ… | | [`codeql-analysis`][codeql-analysis] | - | โœ… | โœ… | โœ… | | [`common-cache`][common-cache] | โœ… | - | - | โœ… | | [`common-file-check`][common-file-check] | - | - | - | โœ… | | [`common-retry`][common-retry] | - | - | - | โœ… | | [`compress-images`][compress-images] | - | - | โœ… | โœ… | | [`csharp-build`][csharp-build] | - | โœ… | - | โœ… | | [`csharp-lint-check`][csharp-lint-check] | - | โœ… | - | โœ… | | [`csharp-publish`][csharp-publish] | - | โœ… | โœ… | โœ… | | [`docker-build`][docker-build] | โœ… | โœ… | โœ… | โœ… | | [`docker-publish`][docker-publish] | - | โœ… | - | โœ… | | [`docker-publish-gh`][docker-publish-gh] | โœ… | โœ… | โœ… | โœ… | | [`docker-publish-hub`][docker-publish-hub] | โœ… | โœ… | - | โœ… | | [`dotnet-version-detect`][dotnet-version-detect] | - | โœ… | - | โœ… | | [`eslint-check`][eslint-check] | โœ… | - | - | โœ… | | [`eslint-fix`][eslint-fix] | - | - | โœ… | โœ… | | [`github-release`][github-release] | - | - | - | โœ… | | [`go-build`][go-build] | โœ… | โœ… | - | โœ… | | [`go-lint`][go-lint] | โœ… | - | - | โœ… | | [`go-version-detect`][go-version-detect] | - | โœ… | - | โœ… | | [`node-setup`][node-setup] | โœ… | โœ… | โœ… | โœ… | | [`npm-publish`][npm-publish] | - | - | - | โœ… | | [`php-composer`][php-composer] | - | โœ… | โœ… | โœ… | | [`php-laravel-phpunit`][php-laravel-phpunit] | - | โœ… | โœ… | โœ… | | [`php-tests`][php-tests] | - | - | โœ… | โœ… | | [`php-version-detect`][php-version-detect] | - | โœ… | - | โœ… | | [`pr-lint`][pr-lint] | โœ… | โœ… | โœ… | โœ… | | [`pre-commit`][pre-commit] | - | โœ… | โœ… | โœ… | | [`prettier-check`][prettier-check] | โœ… | - | - | โœ… | | [`prettier-fix`][prettier-fix] | - | - | โœ… | โœ… | | [`python-lint-fix`][python-lint-fix] | โœ… | โœ… | โœ… | โœ… | | [`python-version-detect`][python-version-detect] | - | โœ… | - | โœ… | | [`python-version-detect-v2`][python-version-detect-v2] | - | โœ… | - | โœ… | | [`release-monthly`][release-monthly] | - | - | โœ… | โœ… | | [`set-git-config`][set-git-config] | - | - | โœ… | โœ… | | [`stale`][stale] | - | - | โœ… | โœ… | | [`sync-labels`][sync-labels] | - | - | โœ… | โœ… | | [`terraform-lint-fix`][terraform-lint-fix] | - | - | โœ… | โœ… | | [`validate-inputs`][validate-inputs] | - | - | โœ… | โœ… | | [`version-file-parser`][version-file-parser] | - | โœ… | - | โœ… | | [`version-validator`][version-validator] | - | โœ… | - | โœ… | ### Language Support | Language | Actions | |:-----------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | .NET | [`csharp-build`][csharp-build], [`csharp-lint-check`][csharp-lint-check], [`csharp-publish`][csharp-publish], [`dotnet-version-detect`][dotnet-version-detect] | | Ansible | [`ansible-lint-fix`][ansible-lint-fix] | | C# | [`csharp-build`][csharp-build], [`csharp-lint-check`][csharp-lint-check], [`csharp-publish`][csharp-publish], [`dotnet-version-detect`][dotnet-version-detect] | | Docker | [`docker-build`][docker-build], [`docker-publish`][docker-publish], [`docker-publish-gh`][docker-publish-gh], [`docker-publish-hub`][docker-publish-hub] | | Go | [`go-build`][go-build], [`go-lint`][go-lint], [`go-version-detect`][go-version-detect] | | HCL | [`terraform-lint-fix`][terraform-lint-fix] | | JSON | [`biome-check`][biome-check], [`biome-fix`][biome-fix], [`prettier-check`][prettier-check], [`prettier-fix`][prettier-fix] | | JavaScript | [`biome-check`][biome-check], [`biome-fix`][biome-fix], [`eslint-check`][eslint-check], [`eslint-fix`][eslint-fix], [`node-setup`][node-setup], [`prettier-check`][prettier-check], [`prettier-fix`][prettier-fix] | | Laravel | [`php-laravel-phpunit`][php-laravel-phpunit] | | Markdown | [`prettier-check`][prettier-check], [`prettier-fix`][prettier-fix] | | Node.js | [`node-setup`][node-setup], [`npm-publish`][npm-publish] | | PHP | [`php-composer`][php-composer], [`php-laravel-phpunit`][php-laravel-phpunit], [`php-tests`][php-tests], [`php-version-detect`][php-version-detect] | | Python | [`python-lint-fix`][python-lint-fix], [`python-version-detect`][python-version-detect], [`python-version-detect-v2`][python-version-detect-v2] | | Terraform | [`terraform-lint-fix`][terraform-lint-fix] | | TypeScript | [`biome-check`][biome-check], [`biome-fix`][biome-fix], [`eslint-check`][eslint-check], [`eslint-fix`][eslint-fix], [`node-setup`][node-setup], [`prettier-check`][prettier-check], [`prettier-fix`][prettier-fix] | | YAML | [`ansible-lint-fix`][ansible-lint-fix], [`prettier-check`][prettier-check], [`prettier-fix`][prettier-fix] | | npm | [`npm-publish`][npm-publish] | ### Action Usage All actions can be used independently in your workflows: ```yaml # Recommended: Use pinned refs for supply-chain security - uses: ivuorinen/actions/action-name@2025-01-15 # Date-based tag with: # action-specific inputs # Alternative: Use commit SHA for immutability - uses: ivuorinen/actions/action-name@abc123def456 # Full commit SHA with: # action-specific inputs ``` > **Security Note**: Always pin to specific tags or commit SHAs instead of `@main` to ensure reproducible workflows and supply-chain integrity. [ansible-lint-fix]: ansible-lint-fix/README.md [biome-check]: biome-check/README.md [biome-fix]: biome-fix/README.md [codeql-analysis]: codeql-analysis/README.md [common-cache]: common-cache/README.md [common-file-check]: common-file-check/README.md [common-retry]: common-retry/README.md [compress-images]: compress-images/README.md [csharp-build]: csharp-build/README.md [csharp-lint-check]: csharp-lint-check/README.md [csharp-publish]: csharp-publish/README.md [docker-build]: docker-build/README.md [docker-publish]: docker-publish/README.md [docker-publish-gh]: docker-publish-gh/README.md [docker-publish-hub]: docker-publish-hub/README.md [dotnet-version-detect]: dotnet-version-detect/README.md [eslint-check]: eslint-check/README.md [eslint-fix]: eslint-fix/README.md [github-release]: github-release/README.md [go-build]: go-build/README.md [go-lint]: go-lint/README.md [go-version-detect]: go-version-detect/README.md [node-setup]: node-setup/README.md [npm-publish]: npm-publish/README.md [php-composer]: php-composer/README.md [php-laravel-phpunit]: php-laravel-phpunit/README.md [php-tests]: php-tests/README.md [php-version-detect]: php-version-detect/README.md [pr-lint]: pr-lint/README.md [pre-commit]: pre-commit/README.md [prettier-check]: prettier-check/README.md [prettier-fix]: prettier-fix/README.md [python-lint-fix]: python-lint-fix/README.md [python-version-detect]: python-version-detect/README.md [python-version-detect-v2]: python-version-detect-v2/README.md [release-monthly]: release-monthly/README.md [set-git-config]: set-git-config/README.md [stale]: stale/README.md [sync-labels]: sync-labels/README.md [terraform-lint-fix]: terraform-lint-fix/README.md [validate-inputs]: validate-inputs/README.md [version-file-parser]: version-file-parser/README.md [version-validator]: version-validator/README.md --- ## Usage ### Using Actions Externally All actions in this repository can be used in your workflows like any other GitHub Action. **โš ๏ธ Security Best Practice**: Always pin actions to specific tags or commit SHAs instead of `@main` to ensure: - **Reproducibility**: Workflows behave consistently over time - **Supply-chain integrity**: Protection against unexpected changes or compromises - **Immutability**: Reference exact versions that cannot be modified ```yaml steps: - name: Setup Node.js with Auto-Detection uses: ivuorinen/actions/node-setup@2025-01-15 # Date-based tag with: default-version: '20' - name: Detect PHP Version uses: ivuorinen/actions/php-version-detect@abc123def456 # Commit SHA with: default-version: '8.2' - name: Universal Version Parser uses: ivuorinen/actions/version-file-parser@2025-01-15 with: language: 'python' tool-versions-key: 'python' dockerfile-image: 'python' version-file: '.python-version' default-version: '3.12' ``` Actions achieve modularity through composition: ```yaml steps: - name: Parse Version id: parse-version uses: ivuorinen/actions/version-file-parser@2025-01-15 with: language: 'node' tool-versions-key: 'nodejs' dockerfile-image: 'node' version-file: '.nvmrc' default-version: '20' - name: Setup Node.js uses: actions/setup-node@sha with: node-version: ${{ steps.parse-version.outputs.detected-version }} ``` ## Development This repository uses a Makefile-based build system for development tasks: ```bash # Full workflow - docs, format, and lint make all # Individual operations make docs # Generate documentation for all actions make format # Format all files (markdown, YAML, JSON) make lint # Run all linters make check # Quick syntax and tool checks # Development workflow make dev # Format then lint (good for development) make ci # CI workflow - check, docs, lint ``` ### Python Development For Python development (validation system), use these specialized commands: ```bash # Python development workflow make dev-python # Format, lint, and test Python code make test-python # Run Python unit tests make test-python-coverage # Run tests with coverage reporting # Individual Python operations make format-python # Format Python files with ruff make lint-python # Lint Python files with ruff ``` The Python validation system (`validate-inputs/`) includes: - **CalVer and SemVer Support**: Flexible version validation for different schemes - **Comprehensive Test Suite**: Extensive test cases covering all validation types - **Security Features**: Command injection and path traversal protection - **Performance**: Efficient Python regex engine vs multiple bash processes ### Testing ```bash # Run all tests (Python + GitHub Actions) make test # Run specific test types make test-python # Python validation tests only make test-actions # GitHub Actions tests only make test-action ACTION=node-setup # Test specific action # Coverage reporting make test-coverage # All tests with coverage make test-python-coverage # Python tests with coverage ``` For detailed development guidelines, see [CLAUDE.md](CLAUDE.md). ## License This project is licensed under the MIT License. See the [LICENSE](LICENSE.md) file for details.