Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
7ed6fee298 | |||
9c256a53c4 | |||
a5423dfe4d | |||
9705b468fa | |||
f8a7634e91 | |||
96bdc09d14 | |||
96447f88b3 | |||
8635fd3334 | |||
a6da12db45 | |||
07067b6b47 | |||
b50b9d8f19 |
@ -9,13 +9,16 @@ on:
|
||||
|
||||
jobs:
|
||||
unittest:
|
||||
runs-on:
|
||||
- ubuntu-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go: [ stable ]
|
||||
os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ]
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- uses: actions/setup-go@v5.5.0
|
||||
with:
|
||||
go-version: stable
|
||||
go-version: ${{ matrix.go }}
|
||||
- env:
|
||||
GOPROXY: ${{ vars.GOPROXY }}
|
||||
run: make test/unit
|
||||
|
27
.gitea/workflows/golangci-lint.yaml
Normal file
27
.gitea/workflows/golangci-lint.yaml
Normal file
@ -0,0 +1,27 @@
|
||||
name: Golang CI lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [ "opened", "reopened", "synchronize" ]
|
||||
push:
|
||||
branches: [ '**' ]
|
||||
tags-ignore: [ '**' ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
golangci:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
go: [ stable ]
|
||||
os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ]
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- uses: actions/setup-go@v5.5.0
|
||||
with:
|
||||
go-version: ${{ matrix.go }}
|
||||
- uses: golangci/golangci-lint-action@v8.0.0
|
||||
with:
|
||||
version: v2.1
|
@ -1,20 +1,18 @@
|
||||
name: Markdown linter
|
||||
name: 'Lint Markdown files'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [ "opened", "reopened", "synchronize" ]
|
||||
push:
|
||||
branches: [ '**' ]
|
||||
tags-ignore: [ '**' ]
|
||||
workflow_dispatch: {}
|
||||
branches: [ '*' ]
|
||||
tags-ignore: [ '*' ]
|
||||
|
||||
jobs:
|
||||
markdown-lint:
|
||||
container:
|
||||
image: git.cryptic.systems/volker.raschek/markdownlint:0.45.0
|
||||
runs-on:
|
||||
- ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Lint Markdown files
|
||||
run: markdownlint --config .markdownlint.yaml .
|
||||
- uses: DavidAnson/markdownlint-cli2-action@v20.0.0
|
||||
with:
|
||||
globs: '**/*.md'
|
@ -4,6 +4,7 @@ on:
|
||||
push:
|
||||
branches: [ 'master' ]
|
||||
paths: [ 'README.md' ]
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
update-description-on-hub-docker-io:
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
dcmerge
|
||||
coverage.txt
|
||||
coverage.txt
|
||||
dist
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,3 +0,0 @@
|
||||
{
|
||||
"rewrap.wrappingColumn": 120,
|
||||
}
|
4
Makefile
4
Makefile
@ -20,7 +20,6 @@ DCMERGE_IMAGE_NAMESPACE?=${DCMERGE_IMAGE_REGISTRY_USER}
|
||||
DCMERGE_IMAGE_NAME:=${EXECUTABLE}
|
||||
DCMERGE_IMAGE_VERSION?=latest
|
||||
DCMERGE_IMAGE_FULLY_QUALIFIED=${DCMERGE_IMAGE_REGISTRY_NAME}/${DCMERGE_IMAGE_NAMESPACE}/${DCMERGE_IMAGE_NAME}:${DCMERGE_IMAGE_VERSION}
|
||||
DCMERGE_IMAGE_UNQUALIFIED=${DCMERGE_IMAGE_NAMESPACE}/${DCMERGE_IMAGE_NAME}:${DCMERGE_IMAGE_VERSION}
|
||||
|
||||
# BIN
|
||||
# ==============================================================================
|
||||
@ -93,14 +92,13 @@ container-image/build:
|
||||
--no-cache \
|
||||
--pull \
|
||||
--tag ${DCMERGE_IMAGE_FULLY_QUALIFIED} \
|
||||
--tag ${DCMERGE_IMAGE_UNQUALIFIED} \
|
||||
.
|
||||
|
||||
# DELETE CONTAINER IMAGE
|
||||
# ==============================================================================
|
||||
PHONY:=container-image/delete
|
||||
container-image/delete:
|
||||
- ${CONTAINER_RUNTIME} image rm ${DCMERGE_IMAGE_FULLY_QUALIFIED} ${DCMERGE_IMAGE_UNQUALIFIED}
|
||||
- ${CONTAINER_RUNTIME} image rm ${DCMERGE_IMAGE_FULLY_QUALIFIED}
|
||||
|
||||
# PUSH CONTAINER IMAGE
|
||||
# ==============================================================================
|
||||
|
22
cmd/root.go
22
cmd/root.go
@ -19,16 +19,18 @@ func Execute(version string) error {
|
||||
DisableFlagsInUseLine: true,
|
||||
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
|
||||
Args: cobra.MatchAll(cobra.ExactArgs(1)),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
switch args[0] {
|
||||
case "bash":
|
||||
cmd.Root().GenBashCompletion(os.Stdout)
|
||||
return cmd.Root().GenBashCompletion(os.Stdout)
|
||||
case "zsh":
|
||||
cmd.Root().GenZshCompletion(os.Stdout)
|
||||
return cmd.Root().GenZshCompletion(os.Stdout)
|
||||
case "fish":
|
||||
cmd.Root().GenFishCompletion(os.Stdout, true)
|
||||
return cmd.Root().GenFishCompletion(os.Stdout, true)
|
||||
case "powershell":
|
||||
cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
|
||||
return cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
|
||||
default:
|
||||
return fmt.Errorf("unknown shell: %v", args[0])
|
||||
}
|
||||
},
|
||||
}
|
||||
@ -53,17 +55,17 @@ dcmerge docker-compose.yml https://git.example.local/user/repo/docker-compose.ym
|
||||
func run(cmd *cobra.Command, args []string) error {
|
||||
mergeExisting, err := cmd.Flags().GetBool("existing-win")
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to parse flag last-win: %s", err)
|
||||
return fmt.Errorf("failed to parse flag last-win: %s", err)
|
||||
}
|
||||
|
||||
mergeLastWin, err := cmd.Flags().GetBool("last-win")
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to parse flag last-win: %s", err)
|
||||
return fmt.Errorf("failed to parse flag last-win: %s", err)
|
||||
}
|
||||
|
||||
outputFile, err := cmd.Flags().GetString("output-file")
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to parse flag output-file: %s", err)
|
||||
return fmt.Errorf("failed to parse flag output-file: %s", err)
|
||||
}
|
||||
|
||||
dockerComposeConfig := dockerCompose.NewConfig()
|
||||
@ -76,7 +78,7 @@ func run(cmd *cobra.Command, args []string) error {
|
||||
for _, config := range dockerComposeConfigs {
|
||||
switch {
|
||||
case mergeExisting && mergeLastWin:
|
||||
return fmt.Errorf("Neither --first-win or --last-win can be specified - not booth.")
|
||||
return fmt.Errorf("neither --first-win or --last-win can be specified - not booth")
|
||||
case mergeExisting && !mergeLastWin:
|
||||
dockerComposeConfig.MergeExistingWin(config)
|
||||
case !mergeExisting && mergeLastWin:
|
||||
@ -97,7 +99,7 @@ func run(cmd *cobra.Command, args []string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
yamlEncoder := yaml.NewEncoder(f)
|
||||
yamlEncoder.SetIndent(2)
|
||||
|
2
main.go
2
main.go
@ -5,5 +5,5 @@ import "git.cryptic.systems/volker.raschek/dcmerge/cmd"
|
||||
var version string
|
||||
|
||||
func main() {
|
||||
cmd.Execute(version)
|
||||
_ = cmd.Execute(version)
|
||||
}
|
||||
|
@ -1305,8 +1305,8 @@ func (sdoc *DependsOnContainer) Equal(equalable Equalable) bool {
|
||||
|
||||
// MarshalYAML implements the MarshalYAML interface to customize the behavior when being marshaled into a YAML document.
|
||||
func (sdoc *DependsOnContainer) MarshalYAML() (interface{}, error) {
|
||||
var foundAnotherCondition bool = false
|
||||
var dependencyNames []string
|
||||
var foundAnotherCondition = false
|
||||
var dependencyNames = make([]string, 0)
|
||||
|
||||
for dependencyName, dependencyDefinition := range sdoc.DependsOn {
|
||||
if dependencyDefinition.Condition == ServiceDependsOnConditionServiceStarted {
|
||||
|
@ -55,8 +55,8 @@ func EqualStringMap[R Equalable](mapA, mapB map[string]R) bool {
|
||||
|
||||
// ExistsInMap returns true if object of type any exists under the passed name.
|
||||
func ExistsInMap[T any](m map[string]T, name string) bool {
|
||||
switch {
|
||||
case m == nil:
|
||||
switch m {
|
||||
case nil:
|
||||
return false
|
||||
default:
|
||||
_, present := m[name]
|
||||
|
@ -20,15 +20,15 @@ func Fetch(urls ...string) ([]*dockerCompose.Config, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch {
|
||||
case dockerComposeURL.Scheme == "http" || dockerComposeURL.Scheme == "https":
|
||||
switch dockerComposeURL.Scheme {
|
||||
case "http", "https":
|
||||
dockerComposeConfig, err := getDockerComposeViaHTTP(dockerComposeURL.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dockerComposeConfigs = append(dockerComposeConfigs, dockerComposeConfig)
|
||||
case dockerComposeURL.Scheme == "file":
|
||||
case "file":
|
||||
fallthrough
|
||||
default:
|
||||
dockerComposeConfig, err := readDockerComposeFromFile(dockerComposeURL.Path)
|
||||
@ -43,7 +43,7 @@ func Fetch(urls ...string) ([]*dockerCompose.Config, error) {
|
||||
return dockerComposeConfigs, nil
|
||||
}
|
||||
|
||||
var ErrorPathIsDir error = errors.New("Path is a directory")
|
||||
var ErrorPathIsDir error = errors.New("path is a directory")
|
||||
|
||||
func getDockerComposeViaHTTP(url string) (*dockerCompose.Config, error) {
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
@ -55,10 +55,10 @@ func getDockerComposeViaHTTP(url string) (*dockerCompose.Config, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("Received unexpected HTTP-Statuscode %v", resp.StatusCode)
|
||||
return nil, fmt.Errorf("received unexpected HTTP-Statuscode %v", resp.StatusCode)
|
||||
}
|
||||
|
||||
dockerCompose := dockerCompose.NewConfig()
|
||||
@ -85,7 +85,7 @@ func readDockerComposeFromFile(name string) (*dockerCompose.Config, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() { _ = file.Close() }()
|
||||
|
||||
dockerCompose := dockerCompose.NewConfig()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user