Package Usage: go: github.com/posener/goaction
Package goaction enables writing Github Actions in Go.
The idea is: write a standard Go script, one that works with `go run`, and use it as Github action.
The script's inputs - flags and environment variables, are set though the Github action API. This
project will generate all the required files for the script (This generation can be done
automattically with Github action integration). The library also exposes neat API to get workflow
information.
- [x] Write a Go script.
- [x] Add `goaction` configuration in `.github/workflows/goaction.yml`.
- [x] Push the project to Github.
See simplest example for a Goaction script: (posener/goaction-example) https://github.com/posener/goaction-example,
or an example that demonstrait using Github APIs: (posener/goaction-issues-example) https://github.com/posener/goaction-issues-example.
Write Github Action by writing Go code! Just start a Go module with a main package, and execute it
as a Github action using Goaction, or from the command line using `go run`.
A go executable can get inputs from the command line flag and from environment variables. Github
actions should have a `action.yml` file that defines this API. Goaction bridges the gap by parsing
the Go code and creating this file automatically for you.
The main package inputs should be defined with the standard `flag` package for command line
arguments, or by `os.Getenv` for environment variables. These inputs define the API of the program
and `goaction` automatically detect them and creates the `action.yml` file from them.
Additionally, goaction also provides a library that exposes all Github action environment in an
easy-to-use API. See the documentation for more information.
Code segments which should run only in Github action (called "CI mode"), and not when the main
package runs as a command line tool, should be protected by a `if goaction.CI { ... }` block.
In order to convert the repository to a Github action, goaction command line should run on the
**"main file"** (described above). This command can run manually (by ./cmd/goaction) but luckily
`goaction` also comes as a Github action :-)
Goaction Github action keeps the Github action file updated according to the main Go file
automatically. When a PR is made, goaction will post a review explaining what changes to expect.
When a new commit is pushed, Goaction makes sure that the Github action files are updated if needed.
Add the following content to `.github/workflows/goaction.yml`
./action.yml: A "metadata" file for Github actions. If this file exists, the repository is
considered as Github action, and the file contains information that instructs how to invoke this
action. See (metadata syntax) https://help.github.com/en/actions/building-actions/metadata-syntax-for-github-actions.
for more info.
./Dockerfile: A file that contains instructions how to build a container, that is used for Github
actions. Github action uses this file in order to create a container image to the action. The
container can also be built and tested manually:
Goaction parses Go script file and looks for annotations that extends the information that exists in
the function calls. Goaction annotations are a comments that start with `//goaction:` (no space
after slashes). They can only be set on a `var` definition. The following annotations are available:
* `//goaction:required` - sets an input definition to be "required".
* `//goaction:skip` - skips an input out output definition.
* `//goaction:description <description>` - add description for `os.Getenv`.
* `//goaction:default <value>` - add default value for `os.Getenv`.
A list of projects which are using Goaction (please send a PR if your project uses goaction and does
not appear her).
* (posener/goreadme) http://github.com/posener/goreadme
17 versions
Latest release: over 2 years ago
15 dependent packages
View more package details: https://packages.ecosystem.code.gouv.fr/registries/proxy.golang.org/packages/github.com/posener/goaction
Dependent Repos 1
