This is a repository for unofficial Arcaflow plugins.
For official plugins, please see the arcalot/arcaflow-plugins repository.
In order to contribute a plugin, please fork the repository and add your plugin to either the go or the python folder. We currently only support these two languages for plugins.
- Your plugin should include a
README.mdfile that explains the basic function of how to use the plugin as a standalone script and the functions it uses. - You should have tests, they should run in a network-disconnected environment, and they should run from the Dockerfile.
- Your code should use the official Arcaflow plugin SDKs.
- All schema fields should have a name and a description.
- The code committed to this repository MUST be licensed under the Apache 2.0 license.
- You MUST NOT copy code from other projects, even if they are Apache 2.0 licensed, as there may be requirements to keep copyright notices. Include other projects as dependencies instead.
- You MAY include dependencies (code or runtime) under the following licenses:
- Apache License 2.0
- BSD (0-clause, 2-clause or 3-clause)
- EPL 2.0
- GPLv2 or later
- LGPLv2 or later
- MIT, MIT-0
- CC0
- Unlicense
- Any copyright notices MUST read "Arcalot contributors".
- Your plugin code MUST NOT include copyright or license headers in each file.
- Your plugin should contain a
Dockerfilethat is based on CentOS Stream 8 (quay.io/centos/centos:stream8). - Your
Dockerfileshould install all utilities that are required to run your plugin, and your image should work in a network-disconnected environment. - Your
Dockerfileshould use multiple build stages if interim utilities such asgitare needed to enable your plugin workload. - The LICENSE file from arcaflow-plugins should be included in the container image next to your runnable plugin.
- Your
ENTRYPOINTshould point to your plugin with the full path in the JSON-array-form (array), while the defaultCMDshould be empty. See the Dockerfile documentation for details. - Unless your plugin runs in privileged mode (see labels below), your Dockerfile should switch to the user ID and group ID of
1000.
You should add the following labels to your container:
| Label | Description |
|---|---|
org.opencontainers.image.source |
a link to the target directory in the main branch of this repository |
org.opencontainers.image.licenses |
a valid SPDX license expression describing the licenses of the components in the image. (e.g. Apache-2.0 AND GPL-2.0) |
org.opencontainers.image.vendor |
should be Arcalot project |
org.opencontainers.image.authors |
should be Arcalot contributors |
org.opencontainers.image.title |
a human-readable name for the plugin |
io.github.arcalot.arcaflow.plugin.version |
should be 1 |
io.github.arcalot.arcaflow.plugin.privileged |
can be set to 0 if your plugin can only run unprivileged, or 1 if your plugin can only run privileged. Default to both execution modes. The plugin should still be able to start unprivileged and provide a schema even if it normally runs privileged |
io.github.arcalot.arcaflow.plugin.hostnetwork |
can be set to 0 if your plugin can only run on the container network, or 1 if it can only run on the host network. Default to both execution modes |
- You should use the standard Go tooling and add the
go.modandgo.sumfiles. - Your code should be gofmt'd.
- Tests should be runnable using
go test ./...and report the output in the standard Go test output format. - Running
go generate ./...should not produce changes in the git tree. (git diffshould be empty after runninggo generate.) - Your code should pass the golangci-lint vetting.
- Add all
LICENSEandNOTICEfiles for any dependencies to your container image.
- Your code should be runnable with Python 3.10.
- Your project should include a
requirements.txtor apyproject.tomlwith all relevant dependencies declared. - All tests should be included in files called
test_*.py. These files should be directly runnable and exit with a non-zero exit code if the tests failed. - Your code should be formatted according to PEP-8. Use autopep8 if your IDE does not support formatting.