Implement option to add image labels and generate automatic labels (#19)
Fixes #16 Results into labels: ![attels](/attachments/3aa6641e-fe50-4e28-be97-64c0afe2c35a) Co-authored-by: Lauris BH <lauris@nix.lv> Reviewed-on: https://codeberg.org/woodpecker-plugins/plugin-docker-buildx/pulls/19 Reviewed-by: 6543 <6543@obermui.de> Co-authored-by: Lauris BH <lafriks@noreply.codeberg.org> Co-committed-by: Lauris BH <lafriks@noreply.codeberg.org>
This commit is contained in:
parent
8a0424c7a5
commit
be7d7c0244
@ -133,6 +133,19 @@ func settingsFlags(settings *plugin.Settings) []cli.Flag {
|
|||||||
Usage: "generates tag names with the given suffix",
|
Usage: "generates tag names with the given suffix",
|
||||||
Destination: &settings.Build.TagsSuffix,
|
Destination: &settings.Build.TagsSuffix,
|
||||||
},
|
},
|
||||||
|
&cli.StringSliceFlag{
|
||||||
|
Name: "labels",
|
||||||
|
EnvVars: []string{"PLUGIN_LABEL", "PLUGIN_LABELS"},
|
||||||
|
Usage: "sets labels to use for the image",
|
||||||
|
Destination: &settings.Build.Labels,
|
||||||
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "labels.auto",
|
||||||
|
EnvVars: []string{"PLUGIN_DEFAULT_LABELS", "PLUGIN_AUTO_LABEL"},
|
||||||
|
Usage: "generates labels automatically based on git repository info",
|
||||||
|
Value: true,
|
||||||
|
Destination: &settings.Build.LabelsAuto,
|
||||||
|
},
|
||||||
&cli.StringSliceFlag{
|
&cli.StringSliceFlag{
|
||||||
Name: "args",
|
Name: "args",
|
||||||
EnvVars: []string{"PLUGIN_BUILD_ARGS"},
|
EnvVars: []string{"PLUGIN_BUILD_ARGS"},
|
||||||
|
2
docs.md
2
docs.md
@ -98,6 +98,8 @@ It will automatically generate buildkit configuration to use custom CA certifica
|
|||||||
| `context` | `.` | sets the path of the build context to use
|
| `context` | `.` | sets the path of the build context to use
|
||||||
| `default_tags`/`auto_tag` | `false` | generates tag names automatically based on git branch and git tag
|
| `default_tags`/`auto_tag` | `false` | generates tag names automatically based on git branch and git tag
|
||||||
| `default_suffix"`/`auto_tag_suffix`| *none* | generates tag names with the given suffix
|
| `default_suffix"`/`auto_tag_suffix`| *none* | generates tag names with the given suffix
|
||||||
|
| `label`/`labels` | *none* | sets labels to use for the image in format `<name>=<value>`
|
||||||
|
| `default_labels`/`auto_labels` | `true` | sets docker image labels based on git information
|
||||||
| `build_args` | *none* | sets custom build arguments for the build
|
| `build_args` | *none* | sets custom build arguments for the build
|
||||||
| `build_args_from_env` | *none* | forwards environment variables as custom arguments to the build
|
| `build_args_from_env` | *none* | forwards environment variables as custom arguments to the build
|
||||||
| `quiet` | `false` | enables suppression of the build output
|
| `quiet` | `false` | enables suppression of the build output
|
||||||
|
@ -126,6 +126,10 @@ func commandBuild(build Build, dryrun bool) *exec.Cmd {
|
|||||||
args = append(args, "-t", fmt.Sprintf("%s:%s", build.Repo, arg))
|
args = append(args, "-t", fmt.Sprintf("%s:%s", build.Repo, arg))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, l := range build.Labels.Value() {
|
||||||
|
args = append(args, "--label", l)
|
||||||
|
}
|
||||||
|
|
||||||
return exec.Command(dockerExe, args...)
|
return exec.Command(dockerExe, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,8 @@ type Build struct {
|
|||||||
TagsAuto bool // Docker build auto tag
|
TagsAuto bool // Docker build auto tag
|
||||||
TagsSuffix string // Docker build tags with suffix
|
TagsSuffix string // Docker build tags with suffix
|
||||||
Tags cli.StringSlice // Docker build tags
|
Tags cli.StringSlice // Docker build tags
|
||||||
|
LabelsAuto bool // Docker build auto labels
|
||||||
|
Labels cli.StringSlice // Docker build labels
|
||||||
Platforms cli.StringSlice // Docker build target platforms
|
Platforms cli.StringSlice // Docker build target platforms
|
||||||
Args cli.StringSlice // Docker build args
|
Args cli.StringSlice // Docker build args
|
||||||
ArgsEnv cli.StringSlice // Docker build args from env
|
ArgsEnv cli.StringSlice // Docker build args from env
|
||||||
@ -98,6 +100,9 @@ func (p *Plugin) Validate() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if p.settings.Build.LabelsAuto {
|
||||||
|
p.settings.Build.Labels = *cli.NewStringSlice(p.Labels()...)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
32
plugin/labels.go
Normal file
32
plugin/labels.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package plugin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/coreos/go-semver/semver"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Labels returns list of labels to use for image
|
||||||
|
func (p *Plugin) Labels() []string {
|
||||||
|
l := p.settings.Build.Labels.Value()
|
||||||
|
// As described in https://github.com/opencontainers/image-spec/blob/main/annotations.md
|
||||||
|
l = append(l, fmt.Sprintf("org.opencontainers.image.created=%s", time.Now().UTC().Format(time.RFC3339)))
|
||||||
|
if p.settings.Build.Remote != "" {
|
||||||
|
l = append(l, fmt.Sprintf("org.opencontainers.image.source=%s", p.settings.Build.Remote))
|
||||||
|
}
|
||||||
|
if p.pipeline.Repo.Link != "" {
|
||||||
|
l = append(l, fmt.Sprintf("org.opencontainers.image.url=%s", p.pipeline.Repo.Link))
|
||||||
|
}
|
||||||
|
if p.pipeline.Commit.SHA != "" {
|
||||||
|
l = append(l, fmt.Sprintf("org.opencontainers.image.revision=%s", p.pipeline.Commit.SHA))
|
||||||
|
}
|
||||||
|
if p.settings.Build.Ref != "" && strings.HasPrefix(p.settings.Build.Ref, "refs/tags/") {
|
||||||
|
v, err := semver.NewVersion(strings.TrimPrefix(p.settings.Build.Ref[10:], "v"))
|
||||||
|
if err == nil && v != nil {
|
||||||
|
l = append(l, fmt.Sprintf("org.opencontainers.image.version=%s", v.String()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return l
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user