mirror of
https://github.com/ivuorinen/gh-action-readme.git
synced 2026-03-14 16:00:47 +00:00
feat: simplify theme management (#136)
This commit is contained in:
26
CLAUDE.md
26
CLAUDE.md
@@ -1,7 +1,31 @@
|
|||||||
# CLAUDE.md - Development Guide
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
**gh-action-readme** - CLI tool for GitHub Actions documentation generation
|
**gh-action-readme** - CLI tool for GitHub Actions documentation generation
|
||||||
|
|
||||||
|
## 📝 Template Updates
|
||||||
|
|
||||||
|
**Templates are embedded from:** `templates_embed/templates/`
|
||||||
|
|
||||||
|
**To modify templates:**
|
||||||
|
|
||||||
|
1. Edit template files directly in `templates_embed/templates/`
|
||||||
|
2. Rebuild the binary: `go build .`
|
||||||
|
3. Templates are automatically embedded via `//go:embed` directive
|
||||||
|
|
||||||
|
**Available template locations:**
|
||||||
|
|
||||||
|
- Default: `templates_embed/templates/readme.tmpl`
|
||||||
|
- GitHub theme: `templates_embed/templates/themes/github/readme.tmpl`
|
||||||
|
- GitLab theme: `templates_embed/templates/themes/gitlab/readme.tmpl`
|
||||||
|
- Minimal theme: `templates_embed/templates/themes/minimal/readme.tmpl`
|
||||||
|
- Professional: `templates_embed/templates/themes/professional/readme.tmpl`
|
||||||
|
- AsciiDoc theme: `templates_embed/templates/themes/asciidoc/readme.adoc`
|
||||||
|
|
||||||
|
**Template embedding:** Handled by `templates_embed/embed.go` using Go's embed directive.
|
||||||
|
The embedded filesystem is used by default, with fallback to filesystem for development.
|
||||||
|
|
||||||
## 🚨 CRITICAL: README Protection
|
## 🚨 CRITICAL: README Protection
|
||||||
|
|
||||||
**NEVER overwrite `/README.md`** - The root README.md is the main project documentation.
|
**NEVER overwrite `/README.md`** - The root README.md is the main project documentation.
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ gh-action-readme config init
|
|||||||
gh-action-readme gen --recursive --theme github --output-dir docs/
|
gh-action-readme gen --recursive --theme github --output-dir docs/
|
||||||
|
|
||||||
# Custom themes
|
# Custom themes
|
||||||
cp -r templates/themes/github templates/themes/custom
|
cp -r templates_embed/templates/themes/github templates_embed/templates/themes/custom
|
||||||
gh-action-readme gen --theme custom
|
gh-action-readme gen --theme custom
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ const (
|
|||||||
ConfigKeyRepository = "repository"
|
ConfigKeyRepository = "repository"
|
||||||
// ConfigKeyVersion is the version config key.
|
// ConfigKeyVersion is the version config key.
|
||||||
ConfigKeyVersion = "version"
|
ConfigKeyVersion = "version"
|
||||||
|
// ConfigKeyUseDefaultBranch is the configuration key for use default branch behavior.
|
||||||
|
ConfigKeyUseDefaultBranch = "use_default_branch"
|
||||||
|
|
||||||
// Template Configuration
|
// Template Configuration
|
||||||
// ConfigKeyTheme is the configuration key for theme.
|
// ConfigKeyTheme is the configuration key for theme.
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -38,47 +37,6 @@ func TestMain(m *testing.M) {
|
|||||||
os.Exit(code)
|
os.Exit(code)
|
||||||
}
|
}
|
||||||
|
|
||||||
// copyDir recursively copies a directory.
|
|
||||||
func copyDir(src, dst string) error {
|
|
||||||
return filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
relPath, err := filepath.Rel(src, path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
dstPath := filepath.Join(dst, relPath)
|
|
||||||
|
|
||||||
if info.IsDir() {
|
|
||||||
return os.MkdirAll(dstPath, info.Mode())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy file
|
|
||||||
srcFile, err := os.Open(path) // #nosec G304 -- copying test files
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer func() { _ = srcFile.Close() }()
|
|
||||||
|
|
||||||
if err := os.MkdirAll(filepath.Dir(dstPath), 0750); err != nil { // #nosec G301 -- test directory permissions
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
dstFile, err := os.Create(dstPath) // #nosec G304 -- creating test files
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer func() { _ = dstFile.Close() }()
|
|
||||||
|
|
||||||
_, err = io.Copy(dstFile, srcFile)
|
|
||||||
|
|
||||||
return err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// getSharedTestBinary returns the path to the shared test binary, building it once if needed.
|
// getSharedTestBinary returns the path to the shared test binary, building it once if needed.
|
||||||
func getSharedTestBinary(t *testing.T) string {
|
func getSharedTestBinary(t *testing.T) string {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
@@ -108,14 +66,6 @@ func getSharedTestBinary(t *testing.T) string {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy templates directory to binary directory (for compatibility with embedded templates fallback)
|
|
||||||
templatesDir := filepath.Join(filepath.Dir(binaryPath), "templates")
|
|
||||||
if err := copyDir("templates", templatesDir); err != nil {
|
|
||||||
errSharedBinary = err
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedBinaryPath = binaryPath
|
sharedBinaryPath = binaryPath
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,10 @@ type AppConfig struct {
|
|||||||
GitHubToken string `mapstructure:"github_token" yaml:"github_token,omitempty"` // Only in global config
|
GitHubToken string `mapstructure:"github_token" yaml:"github_token,omitempty"` // Only in global config
|
||||||
|
|
||||||
// Repository Information (auto-detected, overridable)
|
// Repository Information (auto-detected, overridable)
|
||||||
Organization string `mapstructure:"organization" yaml:"organization,omitempty"`
|
Organization string `mapstructure:"organization" yaml:"organization,omitempty"`
|
||||||
Repository string `mapstructure:"repository" yaml:"repository,omitempty"`
|
Repository string `mapstructure:"repository" yaml:"repository,omitempty"`
|
||||||
Version string `mapstructure:"version" yaml:"version,omitempty"`
|
Version string `mapstructure:"version" yaml:"version,omitempty"`
|
||||||
|
UseDefaultBranch bool `mapstructure:"use_default_branch" yaml:"use_default_branch"`
|
||||||
|
|
||||||
// Template Settings
|
// Template Settings
|
||||||
Theme string `mapstructure:"theme" yaml:"theme"`
|
Theme string `mapstructure:"theme" yaml:"theme"`
|
||||||
@@ -214,9 +215,10 @@ func resolveThemeTemplate(theme string) string {
|
|||||||
func DefaultAppConfig() *AppConfig {
|
func DefaultAppConfig() *AppConfig {
|
||||||
return &AppConfig{
|
return &AppConfig{
|
||||||
// Repository Information (will be auto-detected)
|
// Repository Information (will be auto-detected)
|
||||||
Organization: "",
|
Organization: "",
|
||||||
Repository: "",
|
Repository: "",
|
||||||
Version: "",
|
Version: "",
|
||||||
|
UseDefaultBranch: true, // Use detected default branch (main/master) in usage examples
|
||||||
|
|
||||||
// Template Settings
|
// Template Settings
|
||||||
Theme: "default", // default, github, gitlab, minimal, professional
|
Theme: "default", // default, github, gitlab, minimal, professional
|
||||||
@@ -340,6 +342,9 @@ func mergeBooleanFields(dst *AppConfig, src *AppConfig) {
|
|||||||
if src.Quiet {
|
if src.Quiet {
|
||||||
dst.Quiet = src.Quiet
|
dst.Quiet = src.Quiet
|
||||||
}
|
}
|
||||||
|
if src.UseDefaultBranch {
|
||||||
|
dst.UseDefaultBranch = src.UseDefaultBranch
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// mergeSecurityFields merges security-sensitive fields if allowed.
|
// mergeSecurityFields merges security-sensitive fields if allowed.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package internal
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
@@ -37,6 +38,10 @@ type TemplateData struct {
|
|||||||
// Computed Values
|
// Computed Values
|
||||||
UsesStatement string `json:"uses_statement"`
|
UsesStatement string `json:"uses_statement"`
|
||||||
|
|
||||||
|
// Path information for subdirectory extraction
|
||||||
|
ActionPath string `json:"action_path,omitempty"`
|
||||||
|
RepoRoot string `json:"repo_root,omitempty"`
|
||||||
|
|
||||||
// Dependencies (populated by dependency analysis)
|
// Dependencies (populated by dependency analysis)
|
||||||
Dependencies []dependencies.Dependency `json:"dependencies,omitempty"`
|
Dependencies []dependencies.Dependency `json:"dependencies,omitempty"`
|
||||||
}
|
}
|
||||||
@@ -122,41 +127,98 @@ func formatVersion(version string) string {
|
|||||||
return version
|
return version
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildUsesString constructs the uses string with optional action name.
|
// buildUsesString constructs the uses string with optional subdirectory path.
|
||||||
func buildUsesString(td *TemplateData, org, repo, version string) string {
|
func buildUsesString(td *TemplateData, org, repo, version string) string {
|
||||||
// Use the validation package's FormatUsesStatement for consistency
|
// Use the validation package's FormatUsesStatement for consistency
|
||||||
if org == "" || repo == "" {
|
if org == "" || repo == "" {
|
||||||
return appconstants.DefaultUsesPlaceholder
|
return appconstants.DefaultUsesPlaceholder
|
||||||
}
|
}
|
||||||
|
|
||||||
// For actions within subdirectories, include the action name
|
// For monorepo actions in subdirectories, extract the actual directory path
|
||||||
if td.Name != "" && repo != "" {
|
subdir := extractActionSubdirectory(td.ActionPath, td.RepoRoot)
|
||||||
actionName := validation.SanitizeActionName(td.Name)
|
|
||||||
if actionName != "" && actionName != repo {
|
if subdir != "" {
|
||||||
// Check if this looks like a subdirectory action
|
// Action is in a subdirectory: org/repo/subdir@version
|
||||||
return validation.FormatUsesStatement(org, repo+"/"+actionName, version)
|
return validation.FormatUsesStatement(org, repo+"/"+subdir, version)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Action is at repo root: org/repo@version
|
||||||
return validation.FormatUsesStatement(org, repo, version)
|
return validation.FormatUsesStatement(org, repo, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
// getActionVersion returns the action version from template data.
|
// extractActionSubdirectory extracts the subdirectory path for an action relative to repo root.
|
||||||
func getActionVersion(data any) string {
|
// For monorepo actions (e.g., org/repo/subdir/action.yml), returns "subdir".
|
||||||
if td, ok := data.(*TemplateData); ok {
|
// For repo-root actions (e.g., org/repo/action.yml), returns empty string.
|
||||||
if td.Config.Version != "" {
|
// Returns empty string if paths cannot be determined.
|
||||||
return td.Config.Version
|
func extractActionSubdirectory(actionPath, repoRoot string) string {
|
||||||
}
|
// Validate inputs
|
||||||
|
if actionPath == "" || repoRoot == "" {
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get absolute paths for reliable comparison
|
||||||
|
absActionPath, err := filepath.Abs(actionPath)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
absRepoRoot, err := filepath.Abs(repoRoot)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the directory containing action.yml
|
||||||
|
actionDir := filepath.Dir(absActionPath)
|
||||||
|
|
||||||
|
// Calculate relative path from repo root to action directory
|
||||||
|
relPath, err := filepath.Rel(absRepoRoot, actionDir)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// If relative path is "." or empty, action is at repo root
|
||||||
|
if relPath == "." || relPath == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// If relative path starts with "..", action is outside repo (shouldn't happen)
|
||||||
|
if strings.HasPrefix(relPath, "..") {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the subdirectory path (e.g., "actions/csharp-build")
|
||||||
|
return relPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// getActionVersion returns the action version from template data.
|
||||||
|
// Priority: 1) Config.Version (explicit override), 2) Default branch (if enabled), 3) "v1" (fallback).
|
||||||
|
func getActionVersion(data any) string {
|
||||||
|
td, ok := data.(*TemplateData)
|
||||||
|
if !ok {
|
||||||
|
return "v1"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Priority 1: Explicit version override
|
||||||
|
if td.Config.Version != "" {
|
||||||
|
return td.Config.Version
|
||||||
|
}
|
||||||
|
|
||||||
|
// Priority 2: Use default branch if enabled and available
|
||||||
|
if td.Config.UseDefaultBranch && td.Git.DefaultBranch != "" {
|
||||||
|
return td.Git.DefaultBranch
|
||||||
|
}
|
||||||
|
|
||||||
|
// Priority 3: Fallback
|
||||||
return "v1"
|
return "v1"
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildTemplateData constructs comprehensive template data from action and configuration.
|
// BuildTemplateData constructs comprehensive template data from action and configuration.
|
||||||
func BuildTemplateData(action *ActionYML, config *AppConfig, repoRoot, actionPath string) *TemplateData {
|
func BuildTemplateData(action *ActionYML, config *AppConfig, repoRoot, actionPath string) *TemplateData {
|
||||||
data := &TemplateData{
|
data := &TemplateData{
|
||||||
ActionYML: action,
|
ActionYML: action,
|
||||||
Config: config,
|
Config: config,
|
||||||
|
ActionPath: actionPath,
|
||||||
|
RepoRoot: repoRoot,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate Git information
|
// Populate Git information
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<footer style="margin-top: 2rem; border-top: 1px solid #ccc; padding-top: 1rem; color: #888; font-size: 0.95em;">
|
|
||||||
<p>Auto-generated by <a href="https://github.com/ivuorinen/gh-action-readme">gh-action-readme</a>. MIT License.</p>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>{{.Name}} GitHub Action Documentation</title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<style>
|
|
||||||
body { font-family: system-ui, sans-serif; margin: 2rem; background: #f9f9fb; }
|
|
||||||
h1, h2, h3 { color: #111; }
|
|
||||||
pre { background: #eee; padding: 1em; border-radius: 6px; }
|
|
||||||
code { font-family: mono; }
|
|
||||||
.badge { vertical-align: middle; margin-right: 8px; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
# {{.Name}}
|
|
||||||
|
|
||||||
{{if .Branding}}
|
|
||||||
> {{.Description}}
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- uses: {{gitUsesString .}}
|
|
||||||
with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: # {{$val.Description}}{{if $val.Default}} (default: {{$val.Default}}){{end}}
|
|
||||||
{{- end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Inputs
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
- **{{$key}}**: {{$input.Description}}{{if $input.Required}} (**required**){{end}}{{if $input.Default}} (default: {{$input.Default}}){{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
## Outputs
|
|
||||||
|
|
||||||
{{range $key, $output := .Outputs}}
|
|
||||||
- **{{$key}}**: {{$output.Description}}
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
See the [action.yml](./action.yml) for a full reference.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Auto-generated by [gh-action-readme](https://github.com/ivuorinen/gh-action-readme)*
|
|
||||||
{{end}}
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
= {{.Name}}
|
|
||||||
:toc: left
|
|
||||||
:toclevels: 3
|
|
||||||
:icons: font
|
|
||||||
:source-highlighter: highlight.js
|
|
||||||
|
|
||||||
{{if .Branding}}image:https://img.shields.io/badge/icon-{{.Branding.Icon}}-{{.Branding.Color}}[{{.Branding.Icon}}] {{end}}+
|
|
||||||
image:https://img.shields.io/badge/GitHub%20Action-{{.Name | replace " " "%20"}}-blue[GitHub Action] +
|
|
||||||
image:https://img.shields.io/badge/license-MIT-green[License]
|
|
||||||
|
|
||||||
[.lead]
|
|
||||||
{{.Description}}
|
|
||||||
|
|
||||||
== Quick Start
|
|
||||||
|
|
||||||
Add this action to your GitHub workflow:
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
name: CI Workflow
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
----
|
|
||||||
|
|
||||||
{{if .Inputs}}
|
|
||||||
== Input Parameters
|
|
||||||
|
|
||||||
[cols="1,3,1,2", options="header"]
|
|
||||||
|===
|
|
||||||
| Parameter | Description | Required | Default
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
| `{{$key}}`
|
|
||||||
| {{$input.Description}}
|
|
||||||
| {{if $input.Required}}✓{{else}}✗{{end}}
|
|
||||||
| {{if $input.Default}}`{{$input.Default}}`{{else}}_none_{{end}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
|===
|
|
||||||
|
|
||||||
=== Parameter Details
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
==== {{$key}}
|
|
||||||
|
|
||||||
{{$input.Description}}
|
|
||||||
|
|
||||||
[horizontal]
|
|
||||||
Type:: String
|
|
||||||
Required:: {{if $input.Required}}Yes{{else}}No{{end}}
|
|
||||||
{{if $input.Default}}Default:: `{{$input.Default}}`{{end}}
|
|
||||||
|
|
||||||
.Example
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
with:
|
|
||||||
{{$key}}: {{if $input.Default}}"{{$input.Default}}"{{else}}"your-value"{{end}}
|
|
||||||
----
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
== Output Parameters
|
|
||||||
|
|
||||||
[cols="1,3", options="header"]
|
|
||||||
|===
|
|
||||||
| Parameter | Description
|
|
||||||
|
|
||||||
{{range $key, $output := .Outputs}}
|
|
||||||
| `{{$key}}`
|
|
||||||
| {{$output.Description}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
|===
|
|
||||||
|
|
||||||
=== Using Outputs
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
- name: {{.Name}}
|
|
||||||
id: action-step
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
|
|
||||||
- name: Use Output
|
|
||||||
run: |
|
|
||||||
{{- range $key, $output := .Outputs}}
|
|
||||||
echo "{{$key}}: \${{"{{"}} steps.action-step.outputs.{{$key}} {{"}}"}}"
|
|
||||||
{{- end}}
|
|
||||||
----
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
== Examples
|
|
||||||
|
|
||||||
=== Basic Usage
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
- name: Basic {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"example-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
----
|
|
||||||
|
|
||||||
=== Advanced Configuration
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
- name: Advanced {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"\${{"{{"}} vars.{{$key | upper}} {{"}}"}}"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: \${{"{{"}} secrets.GITHUB_TOKEN {{"}}"}}
|
|
||||||
----
|
|
||||||
|
|
||||||
=== Conditional Usage
|
|
||||||
|
|
||||||
[source,yaml]
|
|
||||||
----
|
|
||||||
- name: Conditional {{.Name}}
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"production-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
----
|
|
||||||
|
|
||||||
== Troubleshooting
|
|
||||||
|
|
||||||
[TIP]
|
|
||||||
====
|
|
||||||
Common issues and solutions:
|
|
||||||
|
|
||||||
1. **Authentication Errors**: Ensure required secrets are configured
|
|
||||||
2. **Permission Issues**: Verify GitHub token permissions
|
|
||||||
3. **Configuration Errors**: Validate input parameters
|
|
||||||
====
|
|
||||||
|
|
||||||
== Development
|
|
||||||
|
|
||||||
For development information, see the link:./action.yml[action.yml] specification.
|
|
||||||
|
|
||||||
=== Contributing
|
|
||||||
|
|
||||||
Contributions are welcome! Please:
|
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create a feature branch
|
|
||||||
3. Make your changes
|
|
||||||
4. Add tests
|
|
||||||
5. Submit a pull request
|
|
||||||
|
|
||||||
== License
|
|
||||||
|
|
||||||
This project is licensed under the MIT License.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
_Documentation generated with https://github.com/ivuorinen/gh-action-readme[gh-action-readme]_
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
# {{.Name}}
|
|
||||||
|
|
||||||
{{if .Branding}} {{end}}
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
> {{.Description}}
|
|
||||||
|
|
||||||
## 🚀 Quick Start
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
name: My Workflow
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
{{if .Inputs}}
|
|
||||||
## 📥 Inputs
|
|
||||||
|
|
||||||
| Parameter | Description | Required | Default |
|
|
||||||
|-----------|-------------|----------|---------|
|
|
||||||
{{- range $key, $input := .Inputs}}
|
|
||||||
| `{{$key}}` | {{$input.Description}} | {{if $input.Required}}✅{{else}}❌{{end}} | {{if $input.Default}}`{{$input.Default}}`{{else}}-{{end}} |
|
|
||||||
{{- end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
## 📤 Outputs
|
|
||||||
|
|
||||||
| Parameter | Description |
|
|
||||||
|-----------|-------------|
|
|
||||||
{{- range $key, $output := .Outputs}}
|
|
||||||
| `{{$key}}` | {{$output.Description}} |
|
|
||||||
{{- end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## 💡 Examples
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Basic Usage</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"example-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Advanced Configuration</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: {{.Name}} with custom settings
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"custom-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
{{if .Dependencies}}
|
|
||||||
## 📦 Dependencies
|
|
||||||
|
|
||||||
This action uses the following dependencies:
|
|
||||||
|
|
||||||
| Action | Version | Author | Description |
|
|
||||||
|--------|---------|--------|-------------|
|
|
||||||
{{- range .Dependencies}}
|
|
||||||
| {{if .MarketplaceURL}}[{{.Name}}]({{.MarketplaceURL}}){{else}}{{.Name}}{{end}} | {{if .IsPinned}}🔒{{end}}{{.Version}} | [{{.Author}}](https://github.com/{{.Author}}) | {{.Description}} |
|
|
||||||
{{- end}}
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>📋 Dependency Details</summary>
|
|
||||||
|
|
||||||
{{range .Dependencies}}
|
|
||||||
### {{.Name}}{{if .Version}} @ {{.Version}}{{end}}
|
|
||||||
|
|
||||||
{{if .IsPinned}}
|
|
||||||
- 🔒 **Pinned Version**: Locked to specific version for security
|
|
||||||
{{else}}
|
|
||||||
- 📌 **Floating Version**: Using latest version (consider pinning for security)
|
|
||||||
{{end}}
|
|
||||||
- 👤 **Author**: [{{.Author}}](https://github.com/{{.Author}})
|
|
||||||
{{if .MarketplaceURL}}- 🏪 **Marketplace**: [View on GitHub Marketplace]({{.MarketplaceURL}}){{end}}
|
|
||||||
{{if .SourceURL}}- 📂 **Source**: [View Source]({{.SourceURL}}){{end}}
|
|
||||||
{{if .WithParams}}
|
|
||||||
- **Configuration**:
|
|
||||||
```yaml
|
|
||||||
with:
|
|
||||||
{{- range $key, $value := .WithParams}}
|
|
||||||
{{$key}}: {{$value}}
|
|
||||||
{{- end}}
|
|
||||||
```
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{$hasLocalDeps := false}}
|
|
||||||
{{range .Dependencies}}{{if .IsLocalAction}}{{$hasLocalDeps = true}}{{end}}{{end}}
|
|
||||||
{{if $hasLocalDeps}}
|
|
||||||
### Same Repository Dependencies
|
|
||||||
{{range .Dependencies}}{{if .IsLocalAction}}
|
|
||||||
- [{{.Name}}]({{.SourceURL}}) - {{.Description}}
|
|
||||||
{{end}}{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
</details>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## 🔧 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>
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
# {{.Name}}
|
|
||||||
|
|
||||||
{{if .Branding}}**{{.Branding.Icon}}** {{end}}**{{.Description}}**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Add this action to your GitLab CI/CD pipeline or GitHub workflow:
|
|
||||||
|
|
||||||
### GitHub Actions
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- name: {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}{{$val.Default}}{{else}}value{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### GitLab CI/CD
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
{{.Name | lower | replace " " "-"}}:
|
|
||||||
stage: build
|
|
||||||
image: node:20
|
|
||||||
script:
|
|
||||||
- # Your action logic here
|
|
||||||
{{if .Inputs}}variables:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key | upper}}: {{if $val.Default}}{{$val.Default}}{{else}}value{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
{{if .Inputs}}
|
|
||||||
### Input Parameters
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
#### `{{$key}}`
|
|
||||||
- **Description**: {{$input.Description}}
|
|
||||||
- **Type**: String{{if $input.Required}}
|
|
||||||
- **Required**: Yes{{else}}
|
|
||||||
- **Required**: No{{end}}{{if $input.Default}}
|
|
||||||
- **Default**: `{{$input.Default}}`{{end}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
### Output Parameters
|
|
||||||
|
|
||||||
{{range $key, $output := .Outputs}}
|
|
||||||
#### `{{$key}}`
|
|
||||||
- **Description**: {{$output.Description}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## Usage Examples
|
|
||||||
|
|
||||||
### Basic Example
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
{{.Name | lower | replace " " "-"}}:
|
|
||||||
stage: deploy
|
|
||||||
script:
|
|
||||||
- echo "Using {{.Name}}"
|
|
||||||
{{if .Inputs}}variables:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key | upper}}: "{{if $val.Default}}{{$val.Default}}{{else}}example{{end}}"
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Advanced Example
|
|
||||||
|
|
||||||
For more complex scenarios, refer to the [action.yml](./action.yml) specification.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
- [Action specification](./action.yml)
|
|
||||||
- [Usage examples](./examples/)
|
|
||||||
- [Contributing guidelines](./CONTRIBUTING.md)
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This project is licensed under the MIT License.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Generated with [gh-action-readme](https://github.com/ivuorinen/gh-action-readme)*
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# {{.Name}}
|
|
||||||
|
|
||||||
{{.Description}}
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}{{$val.Default}}{{else}}value{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
{{if .Inputs}}
|
|
||||||
## Inputs
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
- `{{$key}}` - {{$input.Description}}{{if $input.Required}} (required){{end}}{{if $input.Default}} (default: `{{$input.Default}}`){{end}}
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
## Outputs
|
|
||||||
|
|
||||||
{{range $key, $output := .Outputs}}
|
|
||||||
- `{{$key}}` - {{$output.Description}}
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
||||||
@@ -1,245 +0,0 @@
|
|||||||
# {{.Name}}
|
|
||||||
|
|
||||||
{{if .Branding}}
|
|
||||||
<div align="center">
|
|
||||||
<img src="https://img.shields.io/badge/icon-{{.Branding.Icon}}-{{.Branding.Color}}" alt="{{.Branding.Icon}}" />
|
|
||||||
<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>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
{{.Description}}
|
|
||||||
|
|
||||||
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)
|
|
||||||
{{if .Inputs}}- [Input Parameters](#input-parameters){{end}}
|
|
||||||
{{if .Outputs}}- [Output Parameters](#output-parameters){{end}}
|
|
||||||
- [Examples](#examples)
|
|
||||||
{{if .Dependencies}}- [Dependencies](#-dependencies){{end}}
|
|
||||||
- [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: {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"your-value-here"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
This action supports various configuration options to customize its behavior according to your needs.
|
|
||||||
|
|
||||||
{{if .Inputs}}
|
|
||||||
### Input Parameters
|
|
||||||
|
|
||||||
| Parameter | Description | Type | Required | Default Value |
|
|
||||||
|-----------|-------------|------|----------|---------------|
|
|
||||||
{{- range $key, $input := .Inputs}}
|
|
||||||
| **`{{$key}}`** | {{$input.Description}} | `string` | {{if $input.Required}}✅ Yes{{else}}❌ No{{end}} | {{if $input.Default}}`{{$input.Default}}`{{else}}_None_{{end}} |
|
|
||||||
{{- end}}
|
|
||||||
|
|
||||||
#### Parameter Details
|
|
||||||
|
|
||||||
{{range $key, $input := .Inputs}}
|
|
||||||
##### `{{$key}}`
|
|
||||||
|
|
||||||
{{$input.Description}}
|
|
||||||
|
|
||||||
- **Type**: String
|
|
||||||
- **Required**: {{if $input.Required}}Yes{{else}}No{{end}}{{if $input.Default}}
|
|
||||||
- **Default**: `{{$input.Default}}`{{end}}
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
with:
|
|
||||||
{{$key}}: {{if $input.Default}}"{{$input.Default}}"{{else}}"your-value-here"{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if .Outputs}}
|
|
||||||
### Output Parameters
|
|
||||||
|
|
||||||
This action provides the following outputs that can be used in subsequent workflow steps:
|
|
||||||
|
|
||||||
| Parameter | Description | Usage |
|
|
||||||
|-----------|-------------|-------|
|
|
||||||
{{- range $key, $output := .Outputs}}
|
|
||||||
| **`{{$key}}`** | {{$output.Description}} | `\${{"{{"}} steps.{{$.Name | lower | replace " " "-"}}.outputs.{{$key}} {{"}}"}}` |
|
|
||||||
{{- end}}
|
|
||||||
|
|
||||||
#### Using Outputs
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: {{.Name}}
|
|
||||||
id: action-step
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
|
|
||||||
- name: Use Output
|
|
||||||
run: |
|
|
||||||
{{- range $key, $output := .Outputs}}
|
|
||||||
echo "{{$key}}: \${{"{{"}} steps.action-step.outputs.{{$key}} {{"}}"}}"
|
|
||||||
{{- end}}
|
|
||||||
```
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
### Basic Usage
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: Basic {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"example-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Advanced Configuration
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: Advanced {{.Name}}
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"\${{"{{"}} vars.{{$key | upper}} {{"}}"}}"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: \${{"{{"}} secrets.GITHUB_TOKEN {{"}}"}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Conditional Usage
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: Conditional {{.Name}}
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: {{gitUsesString .}}
|
|
||||||
{{if .Inputs}}with:
|
|
||||||
{{- range $key, $val := .Inputs}}
|
|
||||||
{{$key}}: {{if $val.Default}}"{{$val.Default}}"{{else}}"production-value"{{end}}
|
|
||||||
{{- end}}{{end}}
|
|
||||||
```
|
|
||||||
|
|
||||||
{{if .Dependencies}}
|
|
||||||
## 📦 Dependencies
|
|
||||||
|
|
||||||
This action uses the following dependencies:
|
|
||||||
|
|
||||||
| Action | Version | Author | Description |
|
|
||||||
|--------|---------|--------|-------------|
|
|
||||||
{{- range .Dependencies}}
|
|
||||||
| {{if .MarketplaceURL}}[{{.Name}}]({{.MarketplaceURL}}){{else}}{{.Name}}{{end}} | {{if .IsPinned}}🔒{{end}}{{.Version}} | [{{.Author}}](https://github.com/{{.Author}}) | {{.Description}} |
|
|
||||||
{{- end}}
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>📋 Dependency Details</summary>
|
|
||||||
|
|
||||||
{{range .Dependencies}}
|
|
||||||
### {{.Name}}{{if .Version}} @ {{.Version}}{{end}}
|
|
||||||
|
|
||||||
{{if .IsPinned}}
|
|
||||||
- 🔒 **Pinned Version**: Locked to specific version for security
|
|
||||||
{{else}}
|
|
||||||
- 📌 **Floating Version**: Using latest version (consider pinning for security)
|
|
||||||
{{end}}
|
|
||||||
- 👤 **Author**: [{{.Author}}](https://github.com/{{.Author}})
|
|
||||||
{{if .MarketplaceURL}}- 🏪 **Marketplace**: [View on GitHub Marketplace]({{.MarketplaceURL}}){{end}}
|
|
||||||
{{if .SourceURL}}- 📂 **Source**: [View Source]({{.SourceURL}}){{end}}
|
|
||||||
{{if .WithParams}}
|
|
||||||
- **Configuration**:
|
|
||||||
```yaml
|
|
||||||
with:
|
|
||||||
{{- range $key, $value := .WithParams}}
|
|
||||||
{{$key}}: {{$value}}
|
|
||||||
{{- end}}
|
|
||||||
```
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{$hasLocalDeps := false}}
|
|
||||||
{{range .Dependencies}}{{if .IsLocalAction}}{{$hasLocalDeps = true}}{{end}}{{end}}
|
|
||||||
{{if $hasLocalDeps}}
|
|
||||||
### Same Repository Dependencies
|
|
||||||
{{range .Dependencies}}{{if .IsLocalAction}}
|
|
||||||
- [{{.Name}}]({{.SourceURL}}) - {{.Description}}
|
|
||||||
{{end}}{{end}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
</details>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
## 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>
|
|
||||||
Reference in New Issue
Block a user