mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-09 12:46:42 -05:00
Support pre-built actions #11526
Open
opened 2025-11-02 09:40:15 -06:00 by GiteaMirror
·
7 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#11526
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @plinss on GitHub (Aug 24, 2023).
Feature Description
Not sure if this is a Gitea or an act_runner issue, but it would be nice to allow actions that are pre-built and downloaded to the act runner as simple binary files.
For example, as I understand the current state, if I were to develop a custom action in Go, currently I need a Go build environment in the Docker image running the action. If the action could be pre-compiled, the binary could be downloaded and executed on any (compatible) Docker image.
This would make it much easier to use existing Docker images for CI jobs.
Screenshots
No response
@wolfogre commented on GitHub (Sep 4, 2023):
I don't think it's really necessary.
The same question could be asked to actions built with nodejs.
"If I were to develop a custom action in NodeJS, currently I need a NodeJS runtime environment in the Docker image running the action. If the action could be pre-packaged with nodejs interpreters, the package could be downloaded and executed on any (compatible) Docker image."
@plinss commented on GitHub (Sep 4, 2023):
I'm not sure you're understanding my ask, or why it's useful.
For example, I have a job step that I really want to run in an image from Docker Hub, this image has everything I need for my build step (say I'm compiling some code in an uncommon language and there's a large build tool chain). Except first I need to checkout my repo before I can build my code. In order to run the checkout action, I need a NodeJS runtime, which isn't included on that Docker image, so that image from Docker Hub isn't actually usable.
What I'm asking for are binary actions, (or potentially prepackaged actions as you describe) something that the act runner can download and run without requiring any special run time environment so it can be used on any Docker image (with a compatible OS, of course). This way the action can be used on any Docker image.
When I first saw the ability to create Go based actions, I was hoping the act runner would be able to compile the action once (locally, or in an image with a go compiler), or just include a downloadable binary in the action's repo, and then use the build action in any image. But unfortunately it just swaps the NodeJS dependency for a Go dependency, which doesn't solve this problem.
@wolfogre commented on GitHub (Sep 4, 2023):
I fully understand your requirement, but the point is that Go based actions are not designed as binary actions to achieve dependency removal.
I understand binary actions will bring a lot of convenience to users, however, they will bring a lot of risks too, we cannot see the internal logic of binary files, which means we would need a set of protective measures to ensure that binary files are compiled from open-source code. This goes beyond the design architecture of actions.
So I'm not saying it's useless, but considering the risks and complexity it brings, I don't think it's necessary. Just my opinion.
@plinss commented on GitHub (Sep 4, 2023):
I understand that Go based actions are not designed as binaries, it was just my initial hope when seeing them.
I also understand the risks of using binaries. My thinking was that there could be a set of known, trusted binaries hosted by Gitea (which would be compiled from open-source) for the most common actions, like checkout, artifact upload/download, etc, and a configuration option to trust a given repository of binaries which one could self-host (ideally served by the user's own Gitea instance as a package).
Frankly, given the number of custom actions out there and their dependency chains, I suspect many of them could be compromised for some time before detection, so they're not exactly risk free either.
The complexity of supporting this could be minimal, a list of locations where binary actions can be downloaded from (likely with some URL path for os, architecture, etc, e.g. /linux/amd64/checkout), and the risks can be mitigated by only allowing a small set of sources. The value to users would be vastly increased number of Docker images available to run jobs in (without having to build custom images to add all the action dependencies).
Necessary? Of course not, one could argue half of Gitea's features aren't necessary because there are work-arounds. Useful? Absolutely. Every work-around you force a user to have to do is a pain point. I for one am already building a number of custom Docker images purely to add dependencies for basic actions that I shouldn't need to do.
FWIW, I have a lot of experience with GitLab's CI/CD system, and it has features like checking out your repo and managing artifacts built in. The fact that these basic operations require a NodeJS runtime in every Docker image is a bit absurd.
@wolfogre commented on GitHub (Sep 4, 2023):
I apologize if anything I said offended you. I simply expressed my viewpoint on this feature and its reasons directly. It's just my personal opinion and doesn't mean that the proposal has been rejected. I didn't closed this issue and I added a new label, indicating that I think it can be further discussed.
I think you could use some actons like
setup goorsetup nodejsto add dependencies. Maybe you think it's a little heavy to set dependencies everytime, however, I would say that's why Gitea/Gitea Actions workflow files are easily reusable, and it's a main difference from GitLab CI/CD.Hmm, I would say it's not absurd, that's how GitHub Actions work, Gitea Actions is designed to be compatible with GitHub Actions.
@plinss commented on GitHub (Sep 4, 2023):
I wasn't offended, and you're entitled to your opinion. I was just making sure my reasoning (and my opinion) is clearly captured for any future discussions.
I do think it's a bit too heavy to re-download and install an entire NodeJS runtime. The main point (IMO) of using a pre-built (and likely locally cached) Docker image is to save bandwidth and CPU costs of setting up a CI environment for every run (as well as saving the additional steps in the workflow file).
And as I understand it,
setup-nodeis primarily used to setup a different NodeJS runtime than what's already on the image, given that it itself is a Typescript action it requires NodeJS to be pre-installed.I'm not saying the absurdity was from Gitea, and I get the benefits of compatibility with GitHub. I think GitHub Actions are absurd to essentially require NodeJS in every Docker image. Every project doesn't revolve around JS.
@ChristopherHX commented on GitHub (Feb 28, 2024):
Not about go actions, since they are an Gitea Actions Extension, but about nodejs actions
For context that is how "nektos/act" works with nodejs actions and that tool is not "GitHub Actions". It seems to me that some people become to think they are the same as long they only use deriviates of that third party tool like embedded in act_runner.
"GitHub Actions" aka "actions/runner" bind mounts node into the container so even "ubuntu:latest" (doesn't have node installed, but is glibc based) can uses setup-node
E.g. my custom actions runner for Gitea Actions can use glibc containers without node preinstalled powered by GitHub's opensource runner