You've already forked dcmerge
Compare commits
25 Commits
v0.7.0
...
9a7b86774f
Author | SHA1 | Date | |
---|---|---|---|
9a7b86774f | |||
d47ea456ba
|
|||
09b1b1e7d2 | |||
dafa93ffa3
|
|||
6bfadcf71f | |||
740a5898f4
|
|||
027e7ed7ad
|
|||
b24b4e6a71
|
|||
c60eb969d0
|
|||
405f996e19
|
|||
f0a9073fa1 | |||
acaee3903c
|
|||
ed4609b326 | |||
a032247c59
|
|||
7ed6fee298
|
|||
9c256a53c4
|
|||
a5423dfe4d
|
|||
9705b468fa
|
|||
f8a7634e91
|
|||
96bdc09d14
|
|||
96447f88b3
|
|||
8635fd3334
|
|||
a6da12db45
|
|||
07067b6b47
|
|||
b50b9d8f19
|
29
.gitea/workflows/golang-linters.yaml
Normal file
29
.gitea/workflows/golang-linters.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
name: "Lint Golang files"
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ "opened", "reopened", "synchronize" ]
|
||||||
|
push:
|
||||||
|
branches: [ '**' ]
|
||||||
|
tags-ignore: [ '**' ]
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
golangci:
|
||||||
|
name: "Run golang CI linter"
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go: [ stable ]
|
||||||
|
os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4.3.0
|
||||||
|
- uses: actions/setup-go@v5.5.0
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go }}
|
||||||
|
- uses: golangci/golangci-lint-action@v8.0.0
|
||||||
|
with:
|
||||||
|
version: v2.4.0 # renovate: datasource=github-releases depName=golangci/golangci-lint
|
@ -1,4 +1,4 @@
|
|||||||
name: Golang Tests
|
name: "Run Golang tests"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@ -6,16 +6,37 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [ '**' ]
|
branches: [ '**' ]
|
||||||
tags-ignore: [ '**' ]
|
tags-ignore: [ '**' ]
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unittest:
|
# integration-test:
|
||||||
runs-on:
|
# name: "Run integration tests"
|
||||||
- ubuntu-latest
|
# runs-on: ${{ matrix.os }}
|
||||||
|
# strategy:
|
||||||
|
# matrix:
|
||||||
|
# go: [ stable ]
|
||||||
|
# os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ]
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v4.3.0
|
||||||
|
# - uses: actions/setup-go@v5.5.0
|
||||||
|
# with:
|
||||||
|
# go-version: ${{ matrix.go }}
|
||||||
|
# - env:
|
||||||
|
# GOPROXY: ${{ vars.GOPROXY }}
|
||||||
|
# run: make test/integration
|
||||||
|
|
||||||
|
unit-test:
|
||||||
|
name: "Run unit tests"
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go: [ stable ]
|
||||||
|
os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.3.0
|
||||||
- uses: actions/setup-go@v5.5.0
|
- uses: actions/setup-go@v5.5.0
|
||||||
with:
|
with:
|
||||||
go-version: stable
|
go-version: ${{ matrix.go }}
|
||||||
- env:
|
- env:
|
||||||
GOPROXY: ${{ vars.GOPROXY }}
|
GOPROXY: ${{ vars.GOPROXY }}
|
||||||
run: make test/unit
|
run: make test/unit
|
||||||
|
@ -1,20 +1,19 @@
|
|||||||
name: Markdown linter
|
name: "Lint Markdown files"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [ "opened", "reopened", "synchronize" ]
|
types: [ "opened", "reopened", "synchronize" ]
|
||||||
push:
|
push:
|
||||||
branches: [ '**' ]
|
branches: [ '*' ]
|
||||||
tags-ignore: [ '**' ]
|
tags-ignore: [ '*' ]
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
markdown-lint:
|
markdown-lint:
|
||||||
container:
|
name: "Run markdown linter"
|
||||||
image: git.cryptic.systems/volker.raschek/markdownlint:0.45.0
|
runs-on: ubuntu-latest
|
||||||
runs-on:
|
|
||||||
- ubuntu-latest
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.3.0
|
||||||
- name: Lint Markdown files
|
- uses: DavidAnson/markdownlint-cli2-action@v20.0.0
|
||||||
run: markdownlint --config .markdownlint.yaml .
|
with:
|
||||||
|
globs: '**/*.md'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
name: Release
|
name: "Release"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -9,15 +9,15 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
runs-on:
|
name: "Release application"
|
||||||
- ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.3.0
|
||||||
- uses: docker/setup-qemu-action@v3.6.0
|
- uses: docker/setup-qemu-action@v3.6.0
|
||||||
- uses: actions/setup-go@v5.5.0
|
- uses: actions/setup-go@v5.5.0
|
||||||
with:
|
with:
|
||||||
go-version: stable
|
go-version: stable
|
||||||
- uses: docker/login-action@v3.4.0
|
- uses: docker/login-action@v3.5.0
|
||||||
with:
|
with:
|
||||||
registry: git.cryptic.systems
|
registry: git.cryptic.systems
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
@ -26,12 +26,13 @@ jobs:
|
|||||||
GITEA_TOKEN: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
|
||||||
GONOSUMDB: ${{ vars.GONOSUMDB }}
|
GONOSUMDB: ${{ vars.GONOSUMDB }}
|
||||||
GOPROXY: ${{ vars.GOPROXY }}
|
GOPROXY: ${{ vars.GOPROXY }}
|
||||||
uses: goreleaser/goreleaser-action@v6.3.0
|
uses: goreleaser/goreleaser-action@v6.4.0
|
||||||
with:
|
with:
|
||||||
version: "~> v2"
|
version: v2.11.2 # renovate: datasource=github-releases depName=goreleaser/goreleaser
|
||||||
args: release --clean
|
args: release --clean
|
||||||
|
|
||||||
sync-to-hub-docker-io:
|
sync-to-hub-docker-io:
|
||||||
|
name: "Upload Images to docker.io"
|
||||||
needs:
|
needs:
|
||||||
- release
|
- release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
name: Update Docker Hub Description
|
name: "Update Docker Hub Description"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ 'master' ]
|
branches: [ 'master' ]
|
||||||
paths: [ 'README.md' ]
|
paths: [ 'README.md' ]
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-description-on-hub-docker-io:
|
update-description-on-hub-docker-io:
|
||||||
runs-on:
|
runs-on: ubuntu-latest
|
||||||
- ubuntu-latest
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.3.0
|
||||||
- uses: peter-evans/dockerhub-description@v4.0.2
|
- uses: peter-evans/dockerhub-description@v4.0.2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_IO_USERNAME }}
|
username: ${{ secrets.DOCKER_IO_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_IO_PASSWORD }}
|
password: ${{ secrets.DOCKER_IO_PASSWORD }}
|
||||||
repository: volkerraschek/dcmerge
|
repository: volkerraschek/dcmerge
|
||||||
readme-filepath: README.md
|
readme-filepath: README.md
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
dcmerge
|
dcmerge
|
||||||
coverage.txt
|
coverage.txt
|
||||||
|
dist
|
13
.golangci.yaml
Normal file
13
.golangci.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: "2"
|
||||||
|
linters:
|
||||||
|
default: standard
|
||||||
|
enable:
|
||||||
|
- errname
|
||||||
|
- gosec
|
||||||
|
|
||||||
|
exclusions:
|
||||||
|
rules: []
|
||||||
|
warn-unused: true
|
||||||
|
|
||||||
|
run:
|
||||||
|
tests: true
|
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_NAME:=${EXECUTABLE}
|
||||||
DCMERGE_IMAGE_VERSION?=latest
|
DCMERGE_IMAGE_VERSION?=latest
|
||||||
DCMERGE_IMAGE_FULLY_QUALIFIED=${DCMERGE_IMAGE_REGISTRY_NAME}/${DCMERGE_IMAGE_NAMESPACE}/${DCMERGE_IMAGE_NAME}:${DCMERGE_IMAGE_VERSION}
|
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
|
# BIN
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
@ -93,14 +92,13 @@ container-image/build:
|
|||||||
--no-cache \
|
--no-cache \
|
||||||
--pull \
|
--pull \
|
||||||
--tag ${DCMERGE_IMAGE_FULLY_QUALIFIED} \
|
--tag ${DCMERGE_IMAGE_FULLY_QUALIFIED} \
|
||||||
--tag ${DCMERGE_IMAGE_UNQUALIFIED} \
|
|
||||||
.
|
.
|
||||||
|
|
||||||
# DELETE CONTAINER IMAGE
|
# DELETE CONTAINER IMAGE
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
PHONY:=container-image/delete
|
PHONY:=container-image/delete
|
||||||
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
|
# PUSH CONTAINER IMAGE
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
24
cmd/root.go
24
cmd/root.go
@ -19,16 +19,18 @@ func Execute(version string) error {
|
|||||||
DisableFlagsInUseLine: true,
|
DisableFlagsInUseLine: true,
|
||||||
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
|
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
|
||||||
Args: cobra.MatchAll(cobra.ExactArgs(1)),
|
Args: cobra.MatchAll(cobra.ExactArgs(1)),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
switch args[0] {
|
switch args[0] {
|
||||||
case "bash":
|
case "bash":
|
||||||
cmd.Root().GenBashCompletion(os.Stdout)
|
return cmd.Root().GenBashCompletion(os.Stdout)
|
||||||
case "zsh":
|
case "zsh":
|
||||||
cmd.Root().GenZshCompletion(os.Stdout)
|
return cmd.Root().GenZshCompletion(os.Stdout)
|
||||||
case "fish":
|
case "fish":
|
||||||
cmd.Root().GenFishCompletion(os.Stdout, true)
|
return cmd.Root().GenFishCompletion(os.Stdout, true)
|
||||||
case "powershell":
|
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 {
|
func run(cmd *cobra.Command, args []string) error {
|
||||||
mergeExisting, err := cmd.Flags().GetBool("existing-win")
|
mergeExisting, err := cmd.Flags().GetBool("existing-win")
|
||||||
if err != nil {
|
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")
|
mergeLastWin, err := cmd.Flags().GetBool("last-win")
|
||||||
if err != nil {
|
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")
|
outputFile, err := cmd.Flags().GetString("output-file")
|
||||||
if err != nil {
|
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()
|
dockerComposeConfig := dockerCompose.NewConfig()
|
||||||
@ -76,7 +78,7 @@ func run(cmd *cobra.Command, args []string) error {
|
|||||||
for _, config := range dockerComposeConfigs {
|
for _, config := range dockerComposeConfigs {
|
||||||
switch {
|
switch {
|
||||||
case mergeExisting && mergeLastWin:
|
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:
|
case mergeExisting && !mergeLastWin:
|
||||||
dockerComposeConfig.MergeExistingWin(config)
|
dockerComposeConfig.MergeExistingWin(config)
|
||||||
case !mergeExisting && mergeLastWin:
|
case !mergeExisting && mergeLastWin:
|
||||||
@ -88,16 +90,18 @@ func run(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
switch {
|
switch {
|
||||||
case len(outputFile) > 0:
|
case len(outputFile) > 0:
|
||||||
|
// #nosec G301
|
||||||
err = os.MkdirAll(filepath.Dir(outputFile), 0755)
|
err = os.MkdirAll(filepath.Dir(outputFile), 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #nosec G304
|
||||||
f, err := os.Create(outputFile)
|
f, err := os.Create(outputFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer func() { _ = f.Close() }()
|
||||||
|
|
||||||
yamlEncoder := yaml.NewEncoder(f)
|
yamlEncoder := yaml.NewEncoder(f)
|
||||||
yamlEncoder.SetIndent(2)
|
yamlEncoder.SetIndent(2)
|
||||||
|
2
main.go
2
main.go
@ -5,5 +5,5 @@ import "git.cryptic.systems/volker.raschek/dcmerge/cmd"
|
|||||||
var version string
|
var version string
|
||||||
|
|
||||||
func main() {
|
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.
|
// MarshalYAML implements the MarshalYAML interface to customize the behavior when being marshaled into a YAML document.
|
||||||
func (sdoc *DependsOnContainer) MarshalYAML() (interface{}, error) {
|
func (sdoc *DependsOnContainer) MarshalYAML() (interface{}, error) {
|
||||||
var foundAnotherCondition bool = false
|
var foundAnotherCondition = false
|
||||||
var dependencyNames []string
|
var dependencyNames = make([]string, 0)
|
||||||
|
|
||||||
for dependencyName, dependencyDefinition := range sdoc.DependsOn {
|
for dependencyName, dependencyDefinition := range sdoc.DependsOn {
|
||||||
if dependencyDefinition.Condition == ServiceDependsOnConditionServiceStarted {
|
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.
|
// ExistsInMap returns true if object of type any exists under the passed name.
|
||||||
func ExistsInMap[T any](m map[string]T, name string) bool {
|
func ExistsInMap[T any](m map[string]T, name string) bool {
|
||||||
switch {
|
switch m {
|
||||||
case m == nil:
|
case nil:
|
||||||
return false
|
return false
|
||||||
default:
|
default:
|
||||||
_, present := m[name]
|
_, present := m[name]
|
||||||
|
@ -20,15 +20,15 @@ func Fetch(urls ...string) ([]*dockerCompose.Config, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch {
|
switch dockerComposeURL.Scheme {
|
||||||
case dockerComposeURL.Scheme == "http" || dockerComposeURL.Scheme == "https":
|
case "http", "https":
|
||||||
dockerComposeConfig, err := getDockerComposeViaHTTP(dockerComposeURL.String())
|
dockerComposeConfig, err := getDockerComposeViaHTTP(dockerComposeURL.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
dockerComposeConfigs = append(dockerComposeConfigs, dockerComposeConfig)
|
dockerComposeConfigs = append(dockerComposeConfigs, dockerComposeConfig)
|
||||||
case dockerComposeURL.Scheme == "file":
|
case "file":
|
||||||
fallthrough
|
fallthrough
|
||||||
default:
|
default:
|
||||||
dockerComposeConfig, err := readDockerComposeFromFile(dockerComposeURL.Path)
|
dockerComposeConfig, err := readDockerComposeFromFile(dockerComposeURL.Path)
|
||||||
@ -43,7 +43,7 @@ func Fetch(urls ...string) ([]*dockerCompose.Config, error) {
|
|||||||
return dockerComposeConfigs, nil
|
return dockerComposeConfigs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrorPathIsDir error = errors.New("Path is a directory")
|
var ErrPathIsDir error = errors.New("path is a directory")
|
||||||
|
|
||||||
func getDockerComposeViaHTTP(url string) (*dockerCompose.Config, error) {
|
func getDockerComposeViaHTTP(url string) (*dockerCompose.Config, error) {
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
@ -55,10 +55,10 @@ func getDockerComposeViaHTTP(url string) (*dockerCompose.Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer func() { _ = resp.Body.Close() }()
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
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()
|
dockerCompose := dockerCompose.NewConfig()
|
||||||
@ -78,14 +78,15 @@ func readDockerComposeFromFile(name string) (*dockerCompose.Config, error) {
|
|||||||
case err != nil:
|
case err != nil:
|
||||||
return nil, err
|
return nil, err
|
||||||
case fileStat.IsDir():
|
case fileStat.IsDir():
|
||||||
return nil, fmt.Errorf("%w: %s", ErrorPathIsDir, name)
|
return nil, fmt.Errorf("%w: %s", ErrPathIsDir, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #nosec G304
|
||||||
file, err := os.Open(name)
|
file, err := os.Open(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer func() { _ = file.Close() }()
|
||||||
|
|
||||||
dockerCompose := dockerCompose.NewConfig()
|
dockerCompose := dockerCompose.NewConfig()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user