2022-10-18 03:24:12 +02:00
// Copyright 2022 Woodpecker 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.
2019-04-06 21:32:14 +02:00
package repo
import (
"fmt"
"time"
2021-10-27 21:03:14 +02:00
"github.com/urfave/cli/v2"
2021-10-12 09:25:13 +02:00
2021-10-27 21:03:14 +02:00
"github.com/woodpecker-ci/woodpecker/cli/common"
2021-09-21 16:36:41 +02:00
"github.com/woodpecker-ci/woodpecker/cli/internal"
2021-10-03 00:27:43 +02:00
"github.com/woodpecker-ci/woodpecker/woodpecker-go/woodpecker"
2019-04-06 21:32:14 +02:00
)
2021-10-27 21:03:14 +02:00
var repoUpdateCmd = & cli . Command {
2019-04-06 21:32:14 +02:00
Name : "update" ,
Usage : "update a repository" ,
2023-06-13 01:07:52 +02:00
ArgsUsage : "<repo-id|repo-full-name>" ,
2019-04-06 21:32:14 +02:00
Action : repoUpdate ,
2021-10-27 21:03:14 +02:00
Flags : append ( common . GlobalFlags ,
& cli . BoolFlag {
2019-04-06 21:32:14 +02:00
Name : "trusted" ,
Usage : "repository is trusted" ,
} ,
2021-10-27 21:03:14 +02:00
& cli . BoolFlag {
2019-04-06 21:32:14 +02:00
Name : "gated" ,
Usage : "repository is gated" ,
} ,
2021-10-27 21:03:14 +02:00
& cli . DurationFlag {
2019-04-06 21:32:14 +02:00
Name : "timeout" ,
Usage : "repository timeout" ,
} ,
2021-10-27 21:03:14 +02:00
& cli . StringFlag {
2019-04-06 21:32:14 +02:00
Name : "visibility" ,
Usage : "repository visibility" ,
} ,
2021-10-27 21:03:14 +02:00
& cli . StringFlag {
2019-04-06 21:32:14 +02:00
Name : "config" ,
2021-10-03 00:27:43 +02:00
Usage : "repository configuration path (e.g. .woodpecker.yml)" ,
2019-04-06 21:32:14 +02:00
} ,
2021-10-27 21:03:14 +02:00
& cli . IntFlag {
2022-10-18 03:24:12 +02:00
Name : "pipeline-counter" ,
Usage : "repository starting pipeline number" ,
2019-04-06 21:32:14 +02:00
} ,
2021-10-27 21:03:14 +02:00
& cli . BoolFlag {
2019-04-06 21:32:14 +02:00
Name : "unsafe" ,
2022-10-18 03:24:12 +02:00
Usage : "validate updating the pipeline-counter is unsafe" ,
2019-04-06 21:32:14 +02:00
} ,
2021-10-27 21:03:14 +02:00
) ,
2019-04-06 21:32:14 +02:00
}
func repoUpdate ( c * cli . Context ) error {
2023-06-13 01:07:52 +02:00
repoIDOrFullName := c . Args ( ) . First ( )
client , err := internal . NewClient ( c )
2019-04-06 21:32:14 +02:00
if err != nil {
return err
}
2023-06-13 01:07:52 +02:00
repoID , err := internal . ParseRepo ( client , repoIDOrFullName )
2019-04-06 21:32:14 +02:00
if err != nil {
return err
}
var (
2022-10-18 03:24:12 +02:00
visibility = c . String ( "visibility" )
config = c . String ( "config" )
timeout = c . Duration ( "timeout" )
trusted = c . Bool ( "trusted" )
gated = c . Bool ( "gated" )
pipelineCounter = c . Int ( "pipeline-counter" )
unsafe = c . Bool ( "unsafe" )
2019-04-06 21:32:14 +02:00
)
2021-10-03 00:27:43 +02:00
patch := new ( woodpecker . RepoPatch )
2019-04-06 21:32:14 +02:00
if c . IsSet ( "trusted" ) {
patch . IsTrusted = & trusted
}
if c . IsSet ( "gated" ) {
patch . IsGated = & gated
}
if c . IsSet ( "timeout" ) {
v := int64 ( timeout / time . Minute )
patch . Timeout = & v
}
if c . IsSet ( "config" ) {
patch . Config = & config
}
if c . IsSet ( "visibility" ) {
switch visibility {
case "public" , "private" , "internal" :
patch . Visibility = & visibility
}
}
2022-10-18 03:24:12 +02:00
if c . IsSet ( "pipeline-counter" ) && ! unsafe {
fmt . Printf ( "Setting the pipeline counter is an unsafe operation that could put your repository in an inconsistent state. Please use --unsafe to proceed" )
2019-04-06 21:32:14 +02:00
}
2022-10-18 03:24:12 +02:00
if c . IsSet ( "pipeline-counter" ) && unsafe {
patch . PipelineCounter = & pipelineCounter
2019-04-06 21:32:14 +02:00
}
2023-06-13 01:07:52 +02:00
repo , err := client . RepoPatch ( repoID , patch )
if err != nil {
2019-04-06 21:32:14 +02:00
return err
}
2023-06-13 01:07:52 +02:00
fmt . Printf ( "Successfully updated repository %s\n" , repo . FullName )
2019-04-06 21:32:14 +02:00
return nil
}