Some checks are pending
Build and Release / Lint and Test (push) Waiting to run
Build and Release / Build Binaries (amd64, darwin) (push) Blocked by required conditions
Build and Release / Build Binaries (amd64, linux) (push) Blocked by required conditions
Build and Release / Build Binaries (amd64, windows) (push) Blocked by required conditions
Build and Release / Build Binaries (arm64, darwin) (push) Blocked by required conditions
Build and Release / Build Binaries (arm64, linux) (push) Blocked by required conditions
- Add runner capability discovery API (v2) for AI tools to query before writing workflows - Add release archive feature with filter toggle UI - Add GitHub Actions compatibility layer with action aliasing - Store runner capabilities JSON from act_runner Declare calls - Add migrations for release archive and runner capabilities fields 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
138 lines
4.7 KiB
Go
138 lines
4.7 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package actions
|
|
|
|
// CompatibilityStatus represents the support status of an action
|
|
type CompatibilityStatus string
|
|
|
|
const (
|
|
CompatibilityFull CompatibilityStatus = "full"
|
|
CompatibilityPartial CompatibilityStatus = "partial"
|
|
CompatibilityNone CompatibilityStatus = "none"
|
|
)
|
|
|
|
// ActionCompatibility represents compatibility information for a GitHub action
|
|
type ActionCompatibility struct {
|
|
// Action name (e.g., "actions/checkout")
|
|
Name string
|
|
// Supported versions
|
|
Versions []string
|
|
// Compatibility status
|
|
Status CompatibilityStatus
|
|
// Notes about compatibility
|
|
Notes string
|
|
// Suggested alternative if not fully compatible
|
|
Alternative string
|
|
}
|
|
|
|
// BuiltinCompatibility contains known action compatibility information for Gitea Actions
|
|
// This is used by the capability discovery API to help AI tools write correct workflows
|
|
var BuiltinCompatibility = map[string]*ActionCompatibility{
|
|
"actions/checkout": {
|
|
Name: "actions/checkout",
|
|
Versions: []string{"v2", "v3", "v4"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/setup-node": {
|
|
Name: "actions/setup-node",
|
|
Versions: []string{"v2", "v3", "v4"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/setup-go": {
|
|
Name: "actions/setup-go",
|
|
Versions: []string{"v3", "v4", "v5"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/setup-python": {
|
|
Name: "actions/setup-python",
|
|
Versions: []string{"v4", "v5"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/setup-java": {
|
|
Name: "actions/setup-java",
|
|
Versions: []string{"v3", "v4"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/setup-dotnet": {
|
|
Name: "actions/setup-dotnet",
|
|
Versions: []string{"v3", "v4"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/upload-artifact": {
|
|
Name: "actions/upload-artifact",
|
|
Versions: []string{"v2", "v3"},
|
|
Status: CompatibilityPartial,
|
|
Notes: "v4 not supported on GHES-compatible runners. Use v3 or Gitea API for artifact upload.",
|
|
Alternative: "actions/upload-artifact@v3 or direct Gitea API upload",
|
|
},
|
|
"actions/download-artifact": {
|
|
Name: "actions/download-artifact",
|
|
Versions: []string{"v2", "v3"},
|
|
Status: CompatibilityPartial,
|
|
Notes: "v4 not supported on GHES-compatible runners. Use v3.",
|
|
Alternative: "actions/download-artifact@v3",
|
|
},
|
|
"actions/cache": {
|
|
Name: "actions/cache",
|
|
Versions: []string{"v3", "v4"},
|
|
Status: CompatibilityFull,
|
|
Notes: "Fully compatible with Gitea Actions",
|
|
},
|
|
"actions/github-script": {
|
|
Name: "actions/github-script",
|
|
Versions: []string{"v6", "v7"},
|
|
Status: CompatibilityPartial,
|
|
Notes: "GitHub API calls may not work. Use for basic scripting only.",
|
|
},
|
|
}
|
|
|
|
// UnsupportedFeatures lists features that are not supported in Gitea Actions
|
|
var UnsupportedFeatures = []string{
|
|
"GitHub-hosted runners",
|
|
"Environments with protection rules",
|
|
"OIDC token authentication",
|
|
"Required workflows",
|
|
"Deployment branches",
|
|
"Reusable workflows from other repositories (limited)",
|
|
"actions/upload-artifact@v4",
|
|
"actions/download-artifact@v4",
|
|
}
|
|
|
|
// IncompatibleActions maps action@version to error messages
|
|
var IncompatibleActions = map[string]string{
|
|
"actions/upload-artifact@v4": "v4 not supported on Gitea/GHES-compatible runners. Use actions/upload-artifact@v3 or direct Gitea API upload.",
|
|
"actions/download-artifact@v4": "v4 not supported on Gitea/GHES-compatible runners. Use actions/download-artifact@v3.",
|
|
}
|
|
|
|
// GetCompatibility returns compatibility information for an action
|
|
func GetCompatibility(actionName string) *ActionCompatibility {
|
|
return BuiltinCompatibility[actionName]
|
|
}
|
|
|
|
// GetIncompatibilityMessage returns an error message if the action@version is incompatible
|
|
func GetIncompatibilityMessage(actionWithVersion string) string {
|
|
return IncompatibleActions[actionWithVersion]
|
|
}
|
|
|
|
// IsActionCompatible checks if an action@version is compatible with Gitea Actions
|
|
func IsActionCompatible(actionWithVersion string) bool {
|
|
_, incompatible := IncompatibleActions[actionWithVersion]
|
|
return !incompatible
|
|
}
|
|
|
|
// GetSuggestedAlternative returns a suggested alternative for an incompatible action
|
|
func GetSuggestedAlternative(actionWithVersion string) string {
|
|
alternatives := map[string]string{
|
|
"actions/upload-artifact@v4": "uses: actions/upload-artifact@v3",
|
|
"actions/download-artifact@v4": "uses: actions/download-artifact@v3",
|
|
}
|
|
return alternatives[actionWithVersion]
|
|
}
|