mirror of https://github.com/docker/compose.git
introduce publish (alpha) command
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
792afb8d13
commit
00bd108aec
|
@ -32,6 +32,7 @@ func alphaCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
|
||||||
cmd.AddCommand(
|
cmd.AddCommand(
|
||||||
watchCommand(p, backend),
|
watchCommand(p, backend),
|
||||||
vizCommand(p, backend),
|
vizCommand(p, backend),
|
||||||
|
publishCommand(p, backend),
|
||||||
)
|
)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 Docker Compose CLI authors
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package compose
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"github.com/docker/compose/v2/pkg/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
func publishCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
|
||||||
|
opts := pushOptions{
|
||||||
|
ProjectOptions: p,
|
||||||
|
}
|
||||||
|
publishCmd := &cobra.Command{
|
||||||
|
Use: "publish [OPTIONS] [REPOSITORY]",
|
||||||
|
Short: "Publish compose application",
|
||||||
|
RunE: Adapt(func(ctx context.Context, args []string) error {
|
||||||
|
return runPublish(ctx, backend, opts, args[0])
|
||||||
|
}),
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
}
|
||||||
|
return publishCmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func runPublish(ctx context.Context, backend api.Service, opts pushOptions, repository string) error {
|
||||||
|
project, err := opts.ToProject(nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return backend.Publish(ctx, project, repository)
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
# docker compose alpha publish
|
||||||
|
|
||||||
|
<!---MARKER_GEN_START-->
|
||||||
|
Publish compose application
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
| Name | Type | Default | Description |
|
||||||
|
|:------------|:-----|:--------|:--------------------------------|
|
||||||
|
| `--dry-run` | | | Execute command in dry run mode |
|
||||||
|
|
||||||
|
|
||||||
|
<!---MARKER_GEN_END-->
|
||||||
|
|
|
@ -4,9 +4,11 @@ long: Experimental commands
|
||||||
pname: docker compose
|
pname: docker compose
|
||||||
plink: docker_compose.yaml
|
plink: docker_compose.yaml
|
||||||
cname:
|
cname:
|
||||||
|
- docker compose alpha publish
|
||||||
- docker compose alpha viz
|
- docker compose alpha viz
|
||||||
- docker compose alpha watch
|
- docker compose alpha watch
|
||||||
clink:
|
clink:
|
||||||
|
- docker_compose_alpha_publish.yaml
|
||||||
- docker_compose_alpha_viz.yaml
|
- docker_compose_alpha_viz.yaml
|
||||||
- docker_compose_alpha_watch.yaml
|
- docker_compose_alpha_watch.yaml
|
||||||
inherited_options:
|
inherited_options:
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
command: docker compose alpha publish
|
||||||
|
short: Publish compose application
|
||||||
|
long: Publish compose application
|
||||||
|
usage: docker compose alpha publish [OPTIONS] [REPOSITORY]
|
||||||
|
pname: docker compose alpha
|
||||||
|
plink: docker_compose_alpha.yaml
|
||||||
|
inherited_options:
|
||||||
|
- option: dry-run
|
||||||
|
value_type: bool
|
||||||
|
default_value: "false"
|
||||||
|
description: Execute command in dry run mode
|
||||||
|
deprecated: false
|
||||||
|
hidden: false
|
||||||
|
experimental: false
|
||||||
|
experimentalcli: false
|
||||||
|
kubernetes: false
|
||||||
|
swarm: false
|
||||||
|
deprecated: false
|
||||||
|
hidden: false
|
||||||
|
experimental: false
|
||||||
|
experimentalcli: true
|
||||||
|
kubernetes: false
|
||||||
|
swarm: false
|
||||||
|
|
|
@ -74,6 +74,8 @@ type Service interface {
|
||||||
Events(ctx context.Context, projectName string, options EventsOptions) error
|
Events(ctx context.Context, projectName string, options EventsOptions) error
|
||||||
// Port executes the equivalent to a `compose port`
|
// Port executes the equivalent to a `compose port`
|
||||||
Port(ctx context.Context, projectName string, service string, port uint16, options PortOptions) (string, int, error)
|
Port(ctx context.Context, projectName string, service string, port uint16, options PortOptions) (string, int, error)
|
||||||
|
// Publish executes the equivalent to a `compose publish`
|
||||||
|
Publish(ctx context.Context, project *types.Project, repository string) error
|
||||||
// Images executes the equivalent of a `compose images`
|
// Images executes the equivalent of a `compose images`
|
||||||
Images(ctx context.Context, projectName string, options ImagesOptions) ([]ImageSummary, error)
|
Images(ctx context.Context, projectName string, options ImagesOptions) ([]ImageSummary, error)
|
||||||
// MaxConcurrency defines upper limit for concurrent operations against engine API
|
// MaxConcurrency defines upper limit for concurrent operations against engine API
|
||||||
|
|
|
@ -55,6 +55,7 @@ type ServiceProxy struct {
|
||||||
DryRunModeFn func(ctx context.Context, dryRun bool) (context.Context, error)
|
DryRunModeFn func(ctx context.Context, dryRun bool) (context.Context, error)
|
||||||
VizFn func(ctx context.Context, project *types.Project, options VizOptions) (string, error)
|
VizFn func(ctx context.Context, project *types.Project, options VizOptions) (string, error)
|
||||||
WaitFn func(ctx context.Context, projectName string, options WaitOptions) (int64, error)
|
WaitFn func(ctx context.Context, projectName string, options WaitOptions) (int64, error)
|
||||||
|
PublishFn func(ctx context.Context, project *types.Project, repository string) error
|
||||||
interceptors []Interceptor
|
interceptors []Interceptor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +92,7 @@ func (s *ServiceProxy) WithService(service Service) *ServiceProxy {
|
||||||
s.TopFn = service.Top
|
s.TopFn = service.Top
|
||||||
s.EventsFn = service.Events
|
s.EventsFn = service.Events
|
||||||
s.PortFn = service.Port
|
s.PortFn = service.Port
|
||||||
|
s.PublishFn = service.Publish
|
||||||
s.ImagesFn = service.Images
|
s.ImagesFn = service.Images
|
||||||
s.WatchFn = service.Watch
|
s.WatchFn = service.Watch
|
||||||
s.MaxConcurrencyFn = service.MaxConcurrency
|
s.MaxConcurrencyFn = service.MaxConcurrency
|
||||||
|
@ -311,6 +313,10 @@ func (s *ServiceProxy) Port(ctx context.Context, projectName string, service str
|
||||||
return s.PortFn(ctx, projectName, service, port, options)
|
return s.PortFn(ctx, projectName, service, port, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ServiceProxy) Publish(ctx context.Context, project *types.Project, repository string) error {
|
||||||
|
return s.PublishFn(ctx, project, repository)
|
||||||
|
}
|
||||||
|
|
||||||
// Images implements Service interface
|
// Images implements Service interface
|
||||||
func (s *ServiceProxy) Images(ctx context.Context, project string, options ImagesOptions) ([]ImageSummary, error) {
|
func (s *ServiceProxy) Images(ctx context.Context, project string, options ImagesOptions) ([]ImageSummary, error) {
|
||||||
if s.ImagesFn == nil {
|
if s.ImagesFn == nil {
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 Docker Compose CLI authors
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package compose
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/compose-spec/compose-go/types"
|
||||||
|
"github.com/distribution/distribution/v3/reference"
|
||||||
|
"github.com/docker/compose/v2/pkg/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *composeService) Publish(ctx context.Context, project *types.Project, repository string) error {
|
||||||
|
err := s.Push(ctx, project, api.PushOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = reference.ParseDockerRef(repository)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO publish project.ComposeFiles
|
||||||
|
|
||||||
|
return api.ErrNotImplemented
|
||||||
|
}
|
|
@ -266,6 +266,20 @@ func (mr *MockServiceMockRecorder) Ps(ctx, projectName, options interface{}) *go
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ps", reflect.TypeOf((*MockService)(nil).Ps), ctx, projectName, options)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ps", reflect.TypeOf((*MockService)(nil).Ps), ctx, projectName, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Publish mocks base method.
|
||||||
|
func (m *MockService) Publish(ctx context.Context, project *types.Project, repository string) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Publish", ctx, project, repository)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Publish indicates an expected call of Publish.
|
||||||
|
func (mr *MockServiceMockRecorder) Publish(ctx, project, repository interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Publish", reflect.TypeOf((*MockService)(nil).Publish), ctx, project, repository)
|
||||||
|
}
|
||||||
|
|
||||||
// Pull mocks base method.
|
// Pull mocks base method.
|
||||||
func (m *MockService) Pull(ctx context.Context, project *types.Project, options api.PullOptions) error {
|
func (m *MockService) Pull(ctx context.Context, project *types.Project, options api.PullOptions) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|
Loading…
Reference in New Issue