From fa5de265bfb422cc0bb8d711c3f1afc24a849cfe Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Sat, 2 Jul 2022 00:35:53 +0200 Subject: [PATCH 01/47] [#82] Initial command line interface Lists available CI providers and executes the respective script --- cmd/root.go | 111 ++++++++++++ go.mod | 27 +++ go.sum | 478 ++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 11 ++ 4 files changed, 627 insertions(+) create mode 100644 cmd/root.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..17117dd --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,111 @@ +package cmd + +import ( + "fmt" + "github.com/manifoldco/promptui" + "github.com/spf13/cobra" + "github.com/spf13/viper" + "os" + "os/exec" +) + +var cfgFile string + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "drupal9ci", + Short: "A brief description of your application", + Long: `A longer description that spans multiple lines and likely contains +examples and usage of using your application. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + // Uncomment the following line if your bare application + // has an action associated with it: + // Run: func(cmd *cobra.Command, args []string) { }, +} + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + prompt := promptui.Select{ + Label: "Select CI provider", + Items: []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"}, + } + + _, result, err := prompt.Run() + + if err != nil { + fmt.Printf("Prompt failed %v\n", err) + return + } + + var setupScriptUrl string + switch result { + case "Bitbucket": + setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-bitbucket.sh" + case "CircleCI": + setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-circleci.sh" + case "GitHub Actions": + setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-github-actions.sh" + case "GitLab CI": + setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-gitlab-ci.sh" + case "Travis CI": + setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-travis-ci.sh" + } + + getScriptCmd := exec.Command("curl", "-L", setupScriptUrl) + execScriptCmd := exec.Command("bash") + + pipe, err := getScriptCmd.StdoutPipe() + defer pipe.Close() + + execScriptCmd.Stdin = pipe + + getScriptCmd.Start() + + res, err := execScriptCmd.CombinedOutput() + if err != nil { + fmt.Println("error executing script: ", err.Error()) + } + fmt.Println("output: ", string(res)) +} + +func init() { + cobra.OnInitialize(initConfig) + + // Here you will define your flags and configuration settings. + // Cobra supports persistent flags, which, if defined here, + // will be global for your application. + + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.drupal9ci.yaml)") + + // Cobra also supports local flags, which will only run + // when this action is called directly. + rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} + +// initConfig reads in config file and ENV variables if set. +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + // Find home directory. + home, err := os.UserHomeDir() + cobra.CheckErr(err) + + // Search config in home directory with name ".drupal9ci" (without extension). + viper.AddConfigPath(home) + viper.SetConfigType("yaml") + viper.SetConfigName(".drupal9ci") + } + + viper.AutomaticEnv() // read in environment variables that match + + // If a config file is found, read it in. + if err := viper.ReadInConfig(); err == nil { + fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed()) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..a3103f3 --- /dev/null +++ b/go.mod @@ -0,0 +1,27 @@ +module drupal9ci + +go 1.18 + +require ( + github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/spf13/afero v1.8.2 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.12.0 // indirect + github.com/subosito/gotenv v1.3.0 // indirect + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + golang.org/x/text v0.3.7 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..63e866f --- /dev/null +++ b/go.sum @@ -0,0 +1,478 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/main.go b/main.go new file mode 100644 index 0000000..def5624 --- /dev/null +++ b/main.go @@ -0,0 +1,11 @@ +/* +Copyright © 2022 NAME HERE + +*/ +package main + +import "drupal9ci/cmd" + +func main() { + cmd.Execute() +} From 3e9f9c32516279e0b8e68f7896c2410a7f1df24b Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Sat, 2 Jul 2022 00:38:30 +0200 Subject: [PATCH 02/47] [#82] Ignore the resuting command from running go build --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 485dee6..8e4a01e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +drupal9ci From a633d186aaba31f6c7ddb49cf53c6cfb285347ad Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 00:19:01 +0200 Subject: [PATCH 03/47] [#82] Embed scripts in binary --- .circleci/config.yml | 33 +++++++---- cmd/root.go | 59 +++++++++++-------- main.go | 12 ++-- scripts/scripts.go | 36 +++++++++++ .../setup-bitbucket.sh | 0 .../setup-circleci.sh | 0 .../setup-github-actions.sh | 0 .../setup-gitlab-ci.sh | 0 .../setup-travis-ci.sh | 0 9 files changed, 96 insertions(+), 44 deletions(-) create mode 100644 scripts/scripts.go rename setup-bitbucket.sh => scripts/setup-bitbucket.sh (100%) rename setup-circleci.sh => scripts/setup-circleci.sh (100%) rename setup-github-actions.sh => scripts/setup-github-actions.sh (100%) rename setup-gitlab-ci.sh => scripts/setup-gitlab-ci.sh (100%) rename setup-travis-ci.sh => scripts/setup-travis-ci.sh (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index b9cef61..558a715 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,6 @@ -# PHP CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-php/ for more details -# -version: 2 +version: 2.1 +orbs: + go: circleci/go@1.18 jobs: build: docker: @@ -13,14 +11,23 @@ jobs: steps: - checkout + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' + + - run: + name: Build application + command: | + go build + - run: - name: Build Drupal skeleton with Composer Drupal Project - command: | - composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction + name: Build Drupal skeleton with Composer Drupal Project + command: | + composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction - run: - name: Run setup script - command: | - cp setup-circleci.sh drupal - cd drupal - ./setup-circleci.sh + name: Copy application binary and run it + command: | + cp drupal9ci drupal/ + cd drupal + ./drupal9ci BitBucket diff --git a/cmd/root.go b/cmd/root.go index 17117dd..ee7d53c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,12 +1,15 @@ package cmd import ( + "drupal9ci/scripts" "fmt" "github.com/manifoldco/promptui" "github.com/spf13/cobra" "github.com/spf13/viper" + "io" "os" "os/exec" + "strings" ) var cfgFile string @@ -28,43 +31,49 @@ to quickly create a Cobra application.`, // Execute adds all child commands to the root command and sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. -func Execute() { - prompt := promptui.Select{ - Label: "Select CI provider", - Items: []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"}, - } - - _, result, err := prompt.Run() +func Execute(setupScripts *scripts.SetupScripts) { + var selectedCIProvider string + var setupScript string + var err error - if err != nil { - fmt.Printf("Prompt failed %v\n", err) - return + if len(os.Args) > 1 { + selectedCIProvider = os.Args[1] + } else { + ciProviders := []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"} + + prompt := promptui.Select{ + Label: "Select CI provider", + Items: ciProviders, + } + + _, selectedCIProvider, err = prompt.Run() + if err != nil { + fmt.Printf("Prompt failed %v\n", err) + return + } } - var setupScriptUrl string - switch result { + switch selectedCIProvider { case "Bitbucket": - setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-bitbucket.sh" + setupScript = setupScripts.BitBucket case "CircleCI": - setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-circleci.sh" + setupScript = setupScripts.CircleCI case "GitHub Actions": - setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-github-actions.sh" + setupScript = setupScripts.GitHubActions case "GitLab CI": - setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-gitlab-ci.sh" + setupScript = setupScripts.GitLabCI case "Travis CI": - setupScriptUrl = "https://github.com/lullabot/drupal9ci/raw/master/setup-travis-ci.sh" + setupScript = setupScripts.TravisCI + default: + fmt.Println("Unknown CI provider") + return } - getScriptCmd := exec.Command("curl", "-L", setupScriptUrl) + stringReader := strings.NewReader(setupScript) + stringReadCloser := io.NopCloser(stringReader) execScriptCmd := exec.Command("bash") - pipe, err := getScriptCmd.StdoutPipe() - defer pipe.Close() - - execScriptCmd.Stdin = pipe - - getScriptCmd.Start() - + execScriptCmd.Stdin = stringReadCloser res, err := execScriptCmd.CombinedOutput() if err != nil { fmt.Println("error executing script: ", err.Error()) diff --git a/main.go b/main.go index def5624..eeec8df 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,11 @@ -/* -Copyright © 2022 NAME HERE - -*/ package main -import "drupal9ci/cmd" +import ( + "drupal9ci/cmd" + "drupal9ci/scripts" + _ "embed" +) func main() { - cmd.Execute() + cmd.Execute(scripts.LoadSetupScripts()) } diff --git a/scripts/scripts.go b/scripts/scripts.go new file mode 100644 index 0000000..0ac813e --- /dev/null +++ b/scripts/scripts.go @@ -0,0 +1,36 @@ +package scripts + +import _ "embed" + +//go:embed setup-bitbucket.sh +var setupBitbucket string + +//go:embed setup-circleci.sh +var setupCircleCI string + +//go:embed setup-github-actions.sh +var setupGitHubActions string + +//go:embed setup-gitlab-ci.sh +var setupGitLabCI string + +//go:embed setup-travis-ci.sh +var setupTravisCI string + +type SetupScripts struct { + BitBucket string + CircleCI string + GitHubActions string + GitLabCI string + TravisCI string +} + +func LoadSetupScripts() *SetupScripts { + return &SetupScripts{ + BitBucket: setupBitbucket, + CircleCI: setupCircleCI, + GitHubActions: setupGitHubActions, + GitLabCI: setupGitLabCI, + TravisCI: setupTravisCI, + } +} diff --git a/setup-bitbucket.sh b/scripts/setup-bitbucket.sh similarity index 100% rename from setup-bitbucket.sh rename to scripts/setup-bitbucket.sh diff --git a/setup-circleci.sh b/scripts/setup-circleci.sh similarity index 100% rename from setup-circleci.sh rename to scripts/setup-circleci.sh diff --git a/setup-github-actions.sh b/scripts/setup-github-actions.sh similarity index 100% rename from setup-github-actions.sh rename to scripts/setup-github-actions.sh diff --git a/setup-gitlab-ci.sh b/scripts/setup-gitlab-ci.sh similarity index 100% rename from setup-gitlab-ci.sh rename to scripts/setup-gitlab-ci.sh diff --git a/setup-travis-ci.sh b/scripts/setup-travis-ci.sh similarity index 100% rename from setup-travis-ci.sh rename to scripts/setup-travis-ci.sh From 23880051b8afca53e709c111124a5577610c819d Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 00:21:33 +0200 Subject: [PATCH 04/47] [#82] No Juampy, this is not GitHub Actions XD --- .circleci/config.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 558a715..bf2e507 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,10 +11,6 @@ jobs: steps: - checkout - - uses: actions/setup-go@v3 - with: - go-version: '^1.18' - - run: name: Build application command: | From 2f6060807d9f6c5e9b15b80864eabc3144b87c59 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 00:26:40 +0200 Subject: [PATCH 05/47] [#82] Install go --- .circleci/config.yml | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bf2e507..321f065 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,4 @@ version: 2.1 -orbs: - go: circleci/go@1.18 jobs: build: docker: @@ -12,18 +10,26 @@ jobs: - checkout - run: - name: Build application - command: | - go build + name: Install go + command: | + wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin + go version - run: - name: Build Drupal skeleton with Composer Drupal Project - command: | - composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction + name: Build application + command: | + go build - run: - name: Copy application binary and run it - command: | - cp drupal9ci drupal/ - cd drupal - ./drupal9ci BitBucket + name: Build Drupal skeleton with Composer Drupal Project + command: | + composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction + + - run: + name: Copy application binary and run it + command: | + cp drupal9ci drupal/ + cd drupal + ./drupal9ci BitBucket From 70dd150ea92a0824598db35af63c86a9f6a16471 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 00:27:56 +0200 Subject: [PATCH 06/47] [#82] Install go and build app in single step --- .circleci/config.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 321f065..0a4dcc2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,16 +10,12 @@ jobs: - checkout - run: - name: Install go + name: Build application command: | wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin go version - - - run: - name: Build application - command: | go build - run: From 151ab46a5e077aee2df977daa9da1aaff13e3349 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 00:33:41 +0200 Subject: [PATCH 07/47] [#82] Fix CI provider at CI job --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0a4dcc2..4ede705 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -28,4 +28,5 @@ jobs: command: | cp drupal9ci drupal/ cd drupal - ./drupal9ci BitBucket + # We can't test interactive mode here so we pass a CI provider. + ./drupal9ci Bitbucket From d980d56bac5d27d26f73cdd52cadb537c3fdaefd Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 10:13:51 +0200 Subject: [PATCH 08/47] [#82] Create release binaries workflow --- .github/workflows/release.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..27fb359 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,16 @@ +name: Create release binaries +on: + release: + types: [created] + +jobs: + release-linux-amd64: + name: release linux/amd64 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: wangyoucao577/go-release-action@v1.29 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + goos: linux + goarch: amd64 From 135dd3697471ef3d0fac000879aeff8211bc7d86 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 10:25:57 +0200 Subject: [PATCH 09/47] [#82] Update docs --- README.md | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 42270d7..80192c9 100644 --- a/README.md +++ b/README.md @@ -44,19 +44,12 @@ Otherwise you can go through the files and replace as needed. You can see a list ## Installation -Each CI tool has its own installer, which extracts the required files to run the jobs. It also -adds a demo module with tests. - -Choose a CI tool from the list below and follow its installation steps. - ### [CircleCI](https://circleci.com) [Demo repository](https://github.com/juampynr/drupal8-circleci) | [Deep dive article](https://www.lullabot.com/articles/continuous-integration-drupal-8-circleci) -Open a terminal and run the installer from the root of your project: -```bash -curl -L https://github.com/lullabot/drupal9ci/raw/master/setup-circleci.sh | bash -``` +Download the `drupal9ci` binary from https://github.com/Lullabot/drupal9ci/releases into the project root +and run the command as `./drupal9ci` and select CircleCI. Once complete, continue below to complete the setup. Sign up at [CircleCI](https://circleci.com/) and allow access to your project's repository. @@ -79,15 +72,12 @@ Docker Hub](https://hub.docker.com/r/juampynr/drupal8ci/). If this image does not fit your project's architecture then consider [creating your own image](https://circleci.com/docs/2.0/custom-images/) based out of it. - ### [Travis CI](https://travis-ci.org) [Demo repository](https://github.com/juampynr/drupal8-travis-ci) | [Deep dive article](https://www.lullabot.com/articles/continuous-integration-in-drupal-8-with-travis-ci) -Open a terminal and run the installer from the root of your project: -```bash -curl -L https://github.com/lullabot/drupal9ci/raw/master/setup-travis-ci.sh | bash -``` +Download the `drupal9ci` binary from https://github.com/Lullabot/drupal9ci/releases into the project root +and run the command as `./drupal9ci` and select Travis CI. Once complete, continue below to complete the setup. Sign up at [Travis CI](https://travis-ci.com/) and allow access to your project's repository: @@ -128,10 +118,8 @@ at the pull request's status message: [Demo repository](https://gitlab.com/juampynr/drupal8-gitlab) | [Deep dive article](https://www.lullabot.com/articles/installer-drupal-8-and-gitlab-ci) -Open a terminal and run the installer from the root of your project: -```bash -curl -L https://github.com/lullabot/drupal9ci/raw/master/setup-gitlab-ci.sh | bash -``` +Download the `drupal9ci` binary from https://github.com/Lullabot/drupal9ci/releases into the project root +and run the command as `./drupal9ci` and select GitLab CI. Once complete, continue below to complete the setup. Review, commit, and push the resulting changes. After doing that, navigate to the project's homepage at GitLab and open the CI / CD >> Pipelines section. You should see a running pipeline like @@ -139,7 +127,6 @@ the following one: ![GitLab pipeline](docs/images/gitlab-pipeline.png) - ### [GitHub Actions](https://github.com/features/actions) [Demo repository](https://github.com/juampynr/drupal8-github-actions) @@ -157,17 +144,14 @@ at GitHub and open the Actions tab. You should see a running workflow like the f ### [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines) -Open a terminal and run the installer from the root of your project: -```bash -curl -L https://github.com/lullabot/drupal9ci/raw/master/setup-bitbucket.sh | bash -``` +Download the `drupal9ci` binary from https://github.com/Lullabot/drupal9ci/releases into the project root +and run the command as `./drupal9ci` and select Bitbucket. Once complete, continue below to complete the setup. Review, commit, and push the resulting changes. After doing that, navigate to the repository's homepage at Bitbucket and open the Pipelines tab. You should see a running workflow like the following one: ![Bitbucket pipelines](docs/images/bitbucket.png) - ### Setting up the Behat and Cypress jobs for all platforms The Behat and Cypress jobs require a running Drupal 9 site. The repository contains the code, but for running @@ -175,6 +159,12 @@ tests in a realistic environment you need: ##### 1. A recent copy of the production environment's database +There are several ways to accomplish this: + +**Using a prepopulated Docker database image** + +See [Achieve Rocketship-Fast Jobs in CircleCI by Preinstalling the Database](https://www.lullabot.com/articles/rocket-ship-fast-jobs-circleci-preinstalling-database) + **Travis** If you have Drush site aliases, and your repository is private, then follow these @@ -195,6 +185,8 @@ For example: ![Travis CI db env var](docs/images/travisci-db-var.png) ![CircleCI database via environment variable](docs/images/circleci-db-env.png) +A sample implementation is to use Dropbox API. [See this repository for further details](https://github.com/juampynr/dropbox-api). + ##### 2. The production environment's files directory If you have a site alias, then add `drush rsync @my.alias @self` to the Behat job. Alternatively, From 28ab0d2ffa213fe6cac0ee23fbfd7bd116e76aa9 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 10:34:55 +0200 Subject: [PATCH 10/47] [#82] Adjust README notes --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 80192c9..f49a546 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,6 @@ project using any of the following CI providers: * [GitHub Actions](#github-actions) * [Bitbucket Pipelines](#bitbucket) -To install, simply run the respective installer and allow the CI provider that you chose to watch repository changes -to start building on every pull request. - If you want to test an individual module instead of a Drupal project, see Andrew Berry's [drupal_tests](https://github.com/deviantintegral/drupal_tests). @@ -34,12 +31,12 @@ which is copied at build time into `web/sites/default`. #### DocumentRoot: web vs docroot -By default Apache and the rest of the code is set up to have the `DocumentRoot` folder as `web`. If +By default, Apache and the rest of the code is set up to have the `DocumentRoot` folder as `web`. If your project uses `docroot` instead, the easiest thing to do is to symlink one to the other. This can be done adding a line like [this one](https://github.com/Lullabot/drupal9ci/blob/master/dist/bitbucket/RoboFile.php#L187) before running Apache (you will need to adapt paths). -Otherwise you can go through the files and replace as needed. You can see a list of affected files in +Alternatively you can go through the files and replace as needed. You can see a list of affected files in [this comment](https://github.com/Lullabot/drupal9ci/issues/74#issuecomment-884238645). ## Installation From 4a919fce49c6b360be0ef6c6080c0741f152c697 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 10:48:17 +0200 Subject: [PATCH 11/47] [#82] Refactor command --- cmd/root.go | 66 +++++++++++++++++++++------------------------- scripts/scripts.go | 8 ++++++ 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index ee7d53c..d2a101c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -14,55 +14,31 @@ import ( var cfgFile string -// rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Use: "drupal9ci", - Short: "A brief description of your application", - Long: `A longer description that spans multiple lines and likely contains -examples and usage of using your application. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, - // Uncomment the following line if your bare application - // has an action associated with it: - // Run: func(cmd *cobra.Command, args []string) { }, + Short: "An interactive command to add Continuous Integration to a Drupal project", } -// Execute adds all child commands to the root command and sets flags appropriately. -// This is called by main.main(). It only needs to happen once to the rootCmd. func Execute(setupScripts *scripts.SetupScripts) { - var selectedCIProvider string + var selectedCIProvider *string var setupScript string - var err error - if len(os.Args) > 1 { - selectedCIProvider = os.Args[1] - } else { - ciProviders := []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"} - - prompt := promptui.Select{ - Label: "Select CI provider", - Items: ciProviders, - } - - _, selectedCIProvider, err = prompt.Run() - if err != nil { - fmt.Printf("Prompt failed %v\n", err) - return - } + selectedCIProvider, err := getCIProvider(os.Args) + if err != nil { + fmt.Printf(err.Error()) + return } - switch selectedCIProvider { - case "Bitbucket": + switch *selectedCIProvider { + case scripts.Bitbucket: setupScript = setupScripts.BitBucket - case "CircleCI": + case scripts.CircleCI: setupScript = setupScripts.CircleCI - case "GitHub Actions": + case scripts.GithubActions: setupScript = setupScripts.GitHubActions - case "GitLab CI": + case scripts.GitLabCI: setupScript = setupScripts.GitLabCI - case "Travis CI": + case scripts.TravisCI: setupScript = setupScripts.TravisCI default: fmt.Println("Unknown CI provider") @@ -81,6 +57,24 @@ func Execute(setupScripts *scripts.SetupScripts) { fmt.Println("output: ", string(res)) } +func getCIProvider(args []string) (*string, error) { + if len(args) > 1 { + return &args[1], nil + } + ciProviders := []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"} + + prompt := promptui.Select{ + Label: "Select CI provider", + Items: ciProviders, + } + + _, ciProvider, err := prompt.Run() + if err != nil { + return nil, fmt.Errorf("Prompt failed %s", err.Error()) + } + return &ciProvider, nil +} + func init() { cobra.OnInitialize(initConfig) diff --git a/scripts/scripts.go b/scripts/scripts.go index 0ac813e..e37731e 100644 --- a/scripts/scripts.go +++ b/scripts/scripts.go @@ -2,6 +2,14 @@ package scripts import _ "embed" +const ( + Bitbucket = "Bitbucket" + CircleCI = "CircleCI" + GithubActions = "GitHub Actions" + GitLabCI = "GitLab CI" + TravisCI = "Travis CI" +) + //go:embed setup-bitbucket.sh var setupBitbucket string From 67a514dd8b4e4a83fa6e78300e9fe5e48c1b7939 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:02:58 +0200 Subject: [PATCH 12/47] [#82] Test creating release and publishing Docker image --- .github/workflows/release.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 27fb359..a835f9a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,8 @@ name: Create release binaries on: - release: - types: [created] - + push: +# branches: +# - master jobs: release-linux-amd64: name: release linux/amd64 @@ -14,3 +14,17 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} goos: linux goarch: amd64 + + publish-docker-image: + name: Publish Docker image + steps: + - uses: actions/checkout@v2 + name: Check out code + + - uses: mr-smithers-excellent/docker-build-push@v5 + with: + image: drupal9ci + registry: ghcr.io + githubOrg: lullabot + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} From 4988aefde5614bc8fd2e656a45f53f132762829a Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:05:21 +0200 Subject: [PATCH 13/47] [#82] Add branch to test workflow --- .github/workflows/release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a835f9a..5ca11c9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,9 @@ name: Create release binaries on: push: -# branches: -# - master + branches: + - master + - 82-interactive-cli jobs: release-linux-amd64: name: release linux/amd64 From 199e86990ebe86f34995087345d0dae2f7e08f78 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:09:22 +0200 Subject: [PATCH 14/47] [#82] Adjust workflow conditions --- .github/workflows/release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5ca11c9..542fb9a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,12 +1,12 @@ -name: Create release binaries +name: Merge actions on: push: - branches: - - master - - 82-interactive-cli +# branches: +# - master +# - 82-interactive-cli jobs: release-linux-amd64: - name: release linux/amd64 + name: Build and create a release runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -18,10 +18,10 @@ jobs: publish-docker-image: name: Publish Docker image + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 name: Check out code - - uses: mr-smithers-excellent/docker-build-push@v5 with: image: drupal9ci From c8c951b1325daa736ffd612063cf85c239b37331 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:13:42 +0200 Subject: [PATCH 15/47] [#82] Move build and test job to GitHub Actions --- .circleci/config.yml | 32 ---------------------------- .github/workflows/build-and-test.yml | 27 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 32 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/build-and-test.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 4ede705..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: 2.1 -jobs: - build: - docker: - - image: juampynr/drupal8ci:latest - - working_directory: /opt/drupal - - steps: - - checkout - - - run: - name: Build application - command: | - wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - go version - go build - - - run: - name: Build Drupal skeleton with Composer Drupal Project - command: | - composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction - - - run: - name: Copy application binary and run it - command: | - cp drupal9ci drupal/ - cd drupal - # We can't test interactive mode here so we pass a CI provider. - ./drupal9ci Bitbucket diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..aa76273 --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,27 @@ +name: Build and test +on: + push: + +jobs: + build-and-test: + name: Build and test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build application + run: | + wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin + go version + go build + - name: Build Drupal skeleton with Composer Drupal Project + run: | + composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction + + - name: Copy application binary and run it + run: | + cp drupal9ci drupal/ + cd drupal + # We can't test interactive mode here so we pass a CI provider. + ./drupal9ci Bitbucket From d823cc911da8bbabeffc3a7ce1722e54ef125f3c Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:16:56 +0200 Subject: [PATCH 16/47] [#82] Set tags to latest --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 542fb9a..d8043f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,7 @@ jobs: - uses: mr-smithers-excellent/docker-build-push@v5 with: image: drupal9ci + tags: latest registry: ghcr.io githubOrg: lullabot username: ${{ github.actor }} From 543aba5d4180653d070aa25a418f23d825c979da Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:26:21 +0200 Subject: [PATCH 17/47] [#82] Set release tag to sha --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d8043f0..ae7dec6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,7 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} goos: linux goarch: amd64 + release_tag: ${{ GITHUB_SHA }} publish-docker-image: name: Publish Docker image From 2e173ee6849235bf6c2e10c99bab26e64e0146fd Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:28:07 +0200 Subject: [PATCH 18/47] [#82] Remove curl command from README --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f49a546..796ccae 100644 --- a/README.md +++ b/README.md @@ -128,10 +128,8 @@ the following one: [Demo repository](https://github.com/juampynr/drupal8-github-actions) -Open a terminal and run the installer from the root of your project: -```bash -curl -L https://github.com/lullabot/drupal9ci/raw/master/setup-github-actions.sh | bash -``` +Download the `drupal9ci` binary from https://github.com/Lullabot/drupal9ci/releases into the project root +and run the command as `./drupal9ci` and select GitHub Actions. Once complete, continue below to complete the setup. Review, commit, and push the resulting changes. After doing that, navigate to the repository's homepage at GitHub and open the Actions tab. You should see a running workflow like the following one: From 531a7d86eaf3460cb99e0cf23d2ef78f0986264f Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 11:30:56 +0200 Subject: [PATCH 19/47] [#82] Fix syntax --- .github/workflows/build-and-test.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index aa76273..73c6d62 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -21,7 +21,7 @@ jobs: - name: Copy application binary and run it run: | - cp drupal9ci drupal/ + cp drupal9ci drupal cd drupal # We can't test interactive mode here so we pass a CI provider. ./drupal9ci Bitbucket diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae7dec6..34ccf31 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} goos: linux goarch: amd64 - release_tag: ${{ GITHUB_SHA }} + release_tag: ${{ env.GITHUB_SHA }} publish-docker-image: name: Publish Docker image From 857be58b5310d4c7483fa16d4954ffca409b83c9 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 22:47:53 +0200 Subject: [PATCH 20/47] [#82] Use a different plugin to build releases --- .github/workflows/release.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34ccf31..abdee50 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,12 +10,21 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: wangyoucao577/go-release-action@v1.29 + - name: Build application + run: | + wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin + go version + go build + - uses: "marvinpinto/action-automatic-releases@latest" with: - github_token: ${{ secrets.GITHUB_TOKEN }} - goos: linux - goarch: amd64 - release_tag: ${{ env.GITHUB_SHA }} + automatic_release_tag: latest + title: "${{ $GITHUB_SHA }}" + repo_token: "${{ secrets.GITHUB_TOKEN }}" + prerelease: false + files: | + drupal9ci publish-docker-image: name: Publish Docker image From 7620e391377b7a7968d591413becf79989624cc9 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 22:48:13 +0200 Subject: [PATCH 21/47] [#82] Refactor command in smaller functions --- cmd/root.go | 35 ++++++++++++++--------------------- scripts/scripts.go | 27 ++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index d2a101c..92371ab 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -20,43 +20,36 @@ var rootCmd = &cobra.Command{ } func Execute(setupScripts *scripts.SetupScripts) { - var selectedCIProvider *string - var setupScript string - selectedCIProvider, err := getCIProvider(os.Args) if err != nil { fmt.Printf(err.Error()) return } - switch *selectedCIProvider { - case scripts.Bitbucket: - setupScript = setupScripts.BitBucket - case scripts.CircleCI: - setupScript = setupScripts.CircleCI - case scripts.GithubActions: - setupScript = setupScripts.GitHubActions - case scripts.GitLabCI: - setupScript = setupScripts.GitLabCI - case scripts.TravisCI: - setupScript = setupScripts.TravisCI - default: - fmt.Println("Unknown CI provider") + setupScript, err := scripts.MapCIProviderToScript(selectedCIProvider, setupScripts) + if err != nil { + fmt.Printf(err.Error()) return } - stringReader := strings.NewReader(setupScript) - stringReadCloser := io.NopCloser(stringReader) - execScriptCmd := exec.Command("bash") + fmt.Println("This might take a few seconds...") - execScriptCmd.Stdin = stringReadCloser - res, err := execScriptCmd.CombinedOutput() + res, err := executeCIInstallerScript(setupScript) if err != nil { fmt.Println("error executing script: ", err.Error()) } fmt.Println("output: ", string(res)) } +func executeCIInstallerScript(setupScript *string) ([]byte, error) { + stringReader := strings.NewReader(*setupScript) + stringReadCloser := io.NopCloser(stringReader) + execScriptCmd := exec.Command("bash") + + execScriptCmd.Stdin = stringReadCloser + return execScriptCmd.CombinedOutput() +} + func getCIProvider(args []string) (*string, error) { if len(args) > 1 { return &args[1], nil diff --git a/scripts/scripts.go b/scripts/scripts.go index e37731e..babc4ac 100644 --- a/scripts/scripts.go +++ b/scripts/scripts.go @@ -1,6 +1,9 @@ package scripts -import _ "embed" +import ( + _ "embed" + "fmt" +) const ( Bitbucket = "Bitbucket" @@ -42,3 +45,25 @@ func LoadSetupScripts() *SetupScripts { TravisCI: setupTravisCI, } } + +func MapCIProviderToScript(ciProvider *string, setupScripts *SetupScripts) (*string, error) { + var setupScript *string + var err error + + switch *ciProvider { + case Bitbucket: + setupScript = &setupScripts.BitBucket + case CircleCI: + setupScript = &setupScripts.CircleCI + case GithubActions: + setupScript = &setupScripts.GitHubActions + case GitLabCI: + setupScript = &setupScripts.GitLabCI + case TravisCI: + setupScript = &setupScripts.TravisCI + default: + err = fmt.Errorf("Unknown CI provider") + } + + return setupScript, err +} From 83f39f8b5707e091df4167b9e03d4c6eae5ef2ba Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 22:53:01 +0200 Subject: [PATCH 22/47] [#82] Fix syntax at jobs --- .github/workflows/build-and-test.yml | 8 ++++---- .github/workflows/release.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 73c6d62..dd0d2ce 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -21,7 +21,7 @@ jobs: - name: Copy application binary and run it run: | - cp drupal9ci drupal - cd drupal - # We can't test interactive mode here so we pass a CI provider. - ./drupal9ci Bitbucket + cp drupal9ci drupal + cd drupal + # We can't test interactive mode here so we pass a CI provider. + ./drupal9ci Bitbucket diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index abdee50..2e06bc3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: - uses: "marvinpinto/action-automatic-releases@latest" with: automatic_release_tag: latest - title: "${{ $GITHUB_SHA }}" + title: "${{ GITHUB_SHA }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | From 10a84c81ad84d359f02572b56b9fc95693927b52 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 22:58:44 +0200 Subject: [PATCH 23/47] [#82] Split jobs --- .../{release.yml => create-release.yml} | 19 +------------------ .github/workflows/publish-docker-image.yml | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 18 deletions(-) rename .github/workflows/{release.yml => create-release.yml} (60%) create mode 100644 .github/workflows/publish-docker-image.yml diff --git a/.github/workflows/release.yml b/.github/workflows/create-release.yml similarity index 60% rename from .github/workflows/release.yml rename to .github/workflows/create-release.yml index 2e06bc3..c7e29c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/create-release.yml @@ -1,9 +1,7 @@ name: Merge actions on: push: -# branches: -# - master -# - 82-interactive-cli + jobs: release-linux-amd64: name: Build and create a release @@ -25,18 +23,3 @@ jobs: prerelease: false files: | drupal9ci - - publish-docker-image: - name: Publish Docker image - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - name: Check out code - - uses: mr-smithers-excellent/docker-build-push@v5 - with: - image: drupal9ci - tags: latest - registry: ghcr.io - githubOrg: lullabot - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish-docker-image.yml b/.github/workflows/publish-docker-image.yml new file mode 100644 index 0000000..1b748e8 --- /dev/null +++ b/.github/workflows/publish-docker-image.yml @@ -0,0 +1,19 @@ +name: Merge actions +on: + push: + +jobs: + publish-docker-image: + name: Publish Docker image + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + name: Check out code + - uses: mr-smithers-excellent/docker-build-push@v5 + with: + image: drupal9ci + tags: latest + registry: ghcr.io + githubOrg: lullabot + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} From c0f63182c1d531c2b837a919c8e95d7cb5c2665a Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:03:26 +0200 Subject: [PATCH 24/47] [#82] Fix job names --- .github/workflows/build-and-test.yml | 2 +- .github/workflows/create-release.yml | 2 +- .github/workflows/publish-docker-image.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index dd0d2ce..5863329 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -11,7 +11,7 @@ jobs: - name: Build application run: | wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin go version go build diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index c7e29c1..546799c 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,4 +1,4 @@ -name: Merge actions +name: Create release on: push: diff --git a/.github/workflows/publish-docker-image.yml b/.github/workflows/publish-docker-image.yml index 1b748e8..5191816 100644 --- a/.github/workflows/publish-docker-image.yml +++ b/.github/workflows/publish-docker-image.yml @@ -1,4 +1,4 @@ -name: Merge actions +name: Publish Docker image on: push: From 41efee100123d8d538a94e4240c417924f25afb5 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:13:21 +0200 Subject: [PATCH 25/47] [#82] Remove release name from job --- .github/workflows/create-release.yml | 3 +-- .github/workflows/publish-docker-image.yml | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 546799c..6043eeb 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -3,7 +3,7 @@ on: push: jobs: - release-linux-amd64: + create-release: name: Build and create a release runs-on: ubuntu-latest steps: @@ -18,7 +18,6 @@ jobs: - uses: "marvinpinto/action-automatic-releases@latest" with: automatic_release_tag: latest - title: "${{ GITHUB_SHA }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | diff --git a/.github/workflows/publish-docker-image.yml b/.github/workflows/publish-docker-image.yml index 5191816..6ea74e8 100644 --- a/.github/workflows/publish-docker-image.yml +++ b/.github/workflows/publish-docker-image.yml @@ -8,7 +8,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Check out code - uses: mr-smithers-excellent/docker-build-push@v5 with: image: drupal9ci From a7c9ece84c8c30af1333aff71f428cc7f59afe35 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:18:02 +0200 Subject: [PATCH 26/47] [#82] Fix perms to create release --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 6043eeb..2763c14 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -11,7 +11,7 @@ jobs: - name: Build application run: | wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin go version go build From 338a644357d1f84028d8607fa80aee74818d4553 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:26:57 +0200 Subject: [PATCH 27/47] [#82] Set release name to sha --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 2763c14..b6ff11a 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -17,7 +17,7 @@ jobs: go build - uses: "marvinpinto/action-automatic-releases@latest" with: - automatic_release_tag: latest + automatic_release_tag: "${{ env.GITHUB_SHA }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | From 2f106bc23578a98090773bb1074f6c34868ff51e Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:36:43 +0200 Subject: [PATCH 28/47] [#82] Try a different approach to set sha --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index b6ff11a..70fa2aa 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -17,7 +17,7 @@ jobs: go build - uses: "marvinpinto/action-automatic-releases@latest" with: - automatic_release_tag: "${{ env.GITHUB_SHA }}" + automatic_release_tag: "${{ github.sha }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | From e7e940273e5a05b07b15e007da8b8664674f8c2c Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:40:27 +0200 Subject: [PATCH 29/47] [#82] Use a different action to create a release --- .github/workflows/create-release.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 70fa2aa..e4d08a4 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -15,10 +15,7 @@ jobs: export PATH=$PATH:/usr/local/go/bin go version go build - - uses: "marvinpinto/action-automatic-releases@latest" + - uses: ncipollo/release-action@v1 with: - automatic_release_tag: "${{ github.sha }}" - repo_token: "${{ secrets.GITHUB_TOKEN }}" - prerelease: false - files: | - drupal9ci + artifacts: "drupal9ci" + token: ${{ secrets.GITHUB_TOKEN }} From 802a63ac7fd1f1a0001d7b23d438ce4e676a7fd0 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:48:08 +0200 Subject: [PATCH 30/47] [#82] Set tag and commit in release action --- .github/workflows/create-release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index e4d08a4..f3c5736 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -18,4 +18,6 @@ jobs: - uses: ncipollo/release-action@v1 with: artifacts: "drupal9ci" + commit: "${{ github.ref_name }}" + tag: "${{ github.ref_name }}" token: ${{ secrets.GITHUB_TOKEN }} From cc9c248712ef08f4c595d50714b9675796943c5f Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:54:24 +0200 Subject: [PATCH 31/47] [#82] Yet another release action plugin --- .github/workflows/create-release.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index f3c5736..504a1d1 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,6 +1,5 @@ name: Create release -on: - push: +on: push jobs: create-release: @@ -15,9 +14,8 @@ jobs: export PATH=$PATH:/usr/local/go/bin go version go build - - uses: ncipollo/release-action@v1 - with: - artifacts: "drupal9ci" - commit: "${{ github.ref_name }}" - tag: "${{ github.ref_name }}" - token: ${{ secrets.GITHUB_TOKEN }} + - name: Release + uses: softprops/action-gh-release@v1 + #if: startsWith(github.ref, 'refs/tags/') + with: + files: drupal9ci From 2f4385b039a59c7e81b6b1690f496b6b3e859ce1 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Tue, 5 Jul 2022 23:55:19 +0200 Subject: [PATCH 32/47] [#82] Fix syntax --- .github/workflows/create-release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 504a1d1..7f56671 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -15,7 +15,7 @@ jobs: go version go build - name: Release - uses: softprops/action-gh-release@v1 - #if: startsWith(github.ref, 'refs/tags/') - with: - files: drupal9ci + uses: softprops/action-gh-release@v1 + #if: startsWith(github.ref, 'refs/tags/') + with: + files: drupal9ci From be537a982ecefbad5a34961672040fa2a5eb1205 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 00:03:21 +0200 Subject: [PATCH 33/47] [#82] Use ref as tag name --- .github/workflows/create-release.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 7f56671..f9248b7 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,6 +1,8 @@ name: Create release -on: push - +on: + push: + - master + - 82-interactive-cli jobs: create-release: name: Build and create a release @@ -14,8 +16,10 @@ jobs: export PATH=$PATH:/usr/local/go/bin go version go build - - name: Release - uses: softprops/action-gh-release@v1 - #if: startsWith(github.ref, 'refs/tags/') + - uses: "marvinpinto/action-automatic-releases@latest" with: - files: drupal9ci + automatic_release_tag: "${{ github.ref }}" + repo_token: "${{ secrets.GITHUB_TOKEN }}" + prerelease: false + files: | + drupal9ci From f6a192c9308d507f3cfb4f3c37937552b493c2f8 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 00:05:35 +0200 Subject: [PATCH 34/47] [#82] Fix syntax to select branches --- .github/workflows/create-release.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index f9248b7..2009675 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,8 +1,9 @@ name: Create release on: push: - - master - - 82-interactive-cli + branches: + - master + - 82-interactive-cli jobs: create-release: name: Build and create a release @@ -16,7 +17,7 @@ jobs: export PATH=$PATH:/usr/local/go/bin go version go build - - uses: "marvinpinto/action-automatic-releases@latest" + - uses: marvinpinto/action-automatic-releases@latest with: automatic_release_tag: "${{ github.ref }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" From 81adb7b01aa2fbd35a49b4fb03ef7c74237a86a9 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:08:33 +0200 Subject: [PATCH 35/47] [#82] Only publish Docker image on merge to master --- .github/workflows/publish-docker-image.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-docker-image.yml b/.github/workflows/publish-docker-image.yml index 6ea74e8..8c5acaf 100644 --- a/.github/workflows/publish-docker-image.yml +++ b/.github/workflows/publish-docker-image.yml @@ -1,6 +1,9 @@ name: Publish Docker image on: push: + branches: + - master + - 82-interactive-cli jobs: publish-docker-image: From 5768da4b5ddd03b655185279a6552e89017d4bcf Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:17:39 +0200 Subject: [PATCH 36/47] [#82] Refactor CI provider list --- cmd/root.go | 3 +-- scripts/scripts.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 92371ab..2e99e86 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -54,11 +54,10 @@ func getCIProvider(args []string) (*string, error) { if len(args) > 1 { return &args[1], nil } - ciProviders := []string{"Bitbucket", "CircleCI", "GitHub Actions", "GitLab CI", "Travis CI"} prompt := promptui.Select{ Label: "Select CI provider", - Items: ciProviders, + Items: scripts.GetCIProviderList(), } _, ciProvider, err := prompt.Run() diff --git a/scripts/scripts.go b/scripts/scripts.go index babc4ac..1c9b121 100644 --- a/scripts/scripts.go +++ b/scripts/scripts.go @@ -36,6 +36,16 @@ type SetupScripts struct { TravisCI string } +func GetCIProviderList() []string { + return []string{ + Bitbucket, + CircleCI, + GithubActions, + GitLabCI, + TravisCI, + } +} + func LoadSetupScripts() *SetupScripts { return &SetupScripts{ BitBucket: setupBitbucket, From c28f8eb6e097148f74f01aba2a85464a645c1569 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:35:38 +0200 Subject: [PATCH 37/47] [#82] Add noop CircleCI job --- .circleci/config.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..82632b5 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,5 @@ +version: 2 +jobs: + noop: + steps: + - checkout From 6acb2a186f7c5dcd1b9059910b83e1ae85c1ccda Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:45:14 +0200 Subject: [PATCH 38/47] [#82] Use sha for release --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 2009675..e7c3a39 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -19,7 +19,7 @@ jobs: go build - uses: marvinpinto/action-automatic-releases@latest with: - automatic_release_tag: "${{ github.ref }}" + automatic_release_tag: "${{ github.sha }}" repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | From 3472d5c0d135274b2e7056fb13fded19feb270ae Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:49:17 +0200 Subject: [PATCH 39/47] [#82] Set docker image at CircleCI noop job --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 82632b5..98a4213 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,7 @@ version: 2 jobs: noop: + docker: + - image: alpine:latest steps: - checkout From fde02591645ec518bb35cfd4895ce6d1ce4cc3d4 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:52:30 +0200 Subject: [PATCH 40/47] [#82] Set short sha for release --- .github/workflows/create-release.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index e7c3a39..34c125d 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -17,9 +17,12 @@ jobs: export PATH=$PATH:/usr/local/go/bin go version go build + - name: Set short sha + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - uses: marvinpinto/action-automatic-releases@latest with: - automatic_release_tag: "${{ github.sha }}" + automatic_release_tag: ${{ steps.vars.outputs.sha_short }} repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false files: | From 0b7490bec866694b189a0c3e94525df4b888e557 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 10:54:12 +0200 Subject: [PATCH 41/47] [#82] Fix job name for CircleCI --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 98a4213..353b718 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,6 @@ version: 2 jobs: - noop: + build: docker: - image: alpine:latest steps: From 64475739f4096772effe454d1f830da874133045 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 11:09:48 +0200 Subject: [PATCH 42/47] [#82] Add code coverage job --- .github/workflows/create-release.yml | 7 +++-- .../{build-and-test.yml => test.yml} | 27 +++++++++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) rename .github/workflows/{build-and-test.yml => test.yml} (53%) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 34c125d..e70cec1 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -10,12 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' - name: Build application run: | - wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz - sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - go version go build - name: Set short sha id: vars diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/test.yml similarity index 53% rename from .github/workflows/build-and-test.yml rename to .github/workflows/test.yml index 5863329..8e96703 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/test.yml @@ -1,27 +1,38 @@ -name: Build and test +name: Test on: push: jobs: - build-and-test: - name: Build and test + integration: + name: Integration tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' - name: Build application run: | - wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz - sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - go version go build - name: Build Drupal skeleton with Composer Drupal Project run: | composer create-project drupal-composer/drupal-project:9.x-dev drupal --stability dev --no-interaction - - name: Copy application binary and run it run: | cp drupal9ci drupal cd drupal # We can't test interactive mode here so we pass a CI provider. ./drupal9ci Bitbucket + + unit: + name: Unit tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' + - name: Run tests with coverage + run: go test -race -coverprofile=coverage.out -covermode=atomic + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 From 60d197c1989ba1d148bc5a47033e3ebb04a5346a Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 12:11:58 +0200 Subject: [PATCH 43/47] [#82] Add first test --- go.mod | 4 ++++ go.sum | 3 +++ scripts/scripts.go | 32 ++++++++++++++++++-------------- scripts/scripts_test.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 scripts/scripts_test.go diff --git a/go.mod b/go.mod index a3103f3..bf57763 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,11 @@ module drupal9ci go 1.18 +require github.com/stretchr/testify v1.7.1 + require ( github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect @@ -12,6 +15,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.5.0 // indirect diff --git a/go.sum b/go.sum index 63e866f..860a59f 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -142,6 +143,7 @@ github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -163,6 +165,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= diff --git a/scripts/scripts.go b/scripts/scripts.go index 1c9b121..303efc6 100644 --- a/scripts/scripts.go +++ b/scripts/scripts.go @@ -60,20 +60,24 @@ func MapCIProviderToScript(ciProvider *string, setupScripts *SetupScripts) (*str var setupScript *string var err error - switch *ciProvider { - case Bitbucket: - setupScript = &setupScripts.BitBucket - case CircleCI: - setupScript = &setupScripts.CircleCI - case GithubActions: - setupScript = &setupScripts.GitHubActions - case GitLabCI: - setupScript = &setupScripts.GitLabCI - case TravisCI: - setupScript = &setupScripts.TravisCI - default: - err = fmt.Errorf("Unknown CI provider") + if ciProvider == nil { + err = fmt.Errorf("Missing CI provider") + } else { + switch *ciProvider { + case Bitbucket: + setupScript = &setupScripts.BitBucket + case CircleCI: + setupScript = &setupScripts.CircleCI + case GithubActions: + setupScript = &setupScripts.GitHubActions + case GitLabCI: + setupScript = &setupScripts.GitLabCI + case TravisCI: + setupScript = &setupScripts.TravisCI + default: + err = fmt.Errorf("Unknown CI provider") + } } - + return setupScript, err } diff --git a/scripts/scripts_test.go b/scripts/scripts_test.go new file mode 100644 index 0000000..2c25ffe --- /dev/null +++ b/scripts/scripts_test.go @@ -0,0 +1,34 @@ +package scripts + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMapCIProviderToScript(t *testing.T) { + type testCase struct { + name string + ciProvider func() *string + setupScripts *SetupScripts + assertions func(t *testing.T, tt testCase) + } + tests := []testCase{ + { + name: "wrong provider", + ciProvider: func() *string { + return nil + }, + setupScripts: LoadSetupScripts(), + assertions: func(t *testing.T, tt testCase) { + ciProvider, err := MapCIProviderToScript(tt.ciProvider(), tt.setupScripts) + assert.Nil(t, ciProvider) + assert.Error(t, err) + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.assertions(t, tt) + }) + } +} From 49e02eb25cef2d13622bd4874925fbc0bd87b7a0 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 22:48:29 +0200 Subject: [PATCH 44/47] [#82] Add test to LoadSetupScripts --- .github/workflows/test.yml | 2 +- coverage.out | 13 +++++++++++++ scripts/scripts_test.go | 12 ++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 coverage.out diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8e96703..ba7aeea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,6 +33,6 @@ jobs: with: go-version: '^1.18' - name: Run tests with coverage - run: go test -race -coverprofile=coverage.out -covermode=atomic + run: go test -race -coverprofile=coverage.out -covermode=atomic ./... - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 diff --git a/coverage.out b/coverage.out new file mode 100644 index 0000000..68bb6b7 --- /dev/null +++ b/coverage.out @@ -0,0 +1,13 @@ +mode: atomic +drupal9ci/scripts/scripts.go:39.35,47.2 1 0 +drupal9ci/scripts/scripts.go:49.39,57.2 1 2 +drupal9ci/scripts/scripts.go:59.93,63.23 3 1 +drupal9ci/scripts/scripts.go:82.2,82.25 1 1 +drupal9ci/scripts/scripts.go:63.23,65.3 1 1 +drupal9ci/scripts/scripts.go:65.8,66.22 1 0 +drupal9ci/scripts/scripts.go:67.18,68.41 1 0 +drupal9ci/scripts/scripts.go:69.17,70.40 1 0 +drupal9ci/scripts/scripts.go:71.22,72.45 1 0 +drupal9ci/scripts/scripts.go:73.17,74.40 1 0 +drupal9ci/scripts/scripts.go:75.17,76.40 1 0 +drupal9ci/scripts/scripts.go:77.11,78.43 1 0 diff --git a/scripts/scripts_test.go b/scripts/scripts_test.go index 2c25ffe..bb36e20 100644 --- a/scripts/scripts_test.go +++ b/scripts/scripts_test.go @@ -32,3 +32,15 @@ func TestMapCIProviderToScript(t *testing.T) { }) } } + +func TestLoadSetupScripts(t *testing.T) { + setupScripts := LoadSetupScripts() + expected := &SetupScripts{ + BitBucket: setupBitbucket, + CircleCI: setupCircleCI, + GitHubActions: setupGitHubActions, + GitLabCI: setupGitLabCI, + TravisCI: setupTravisCI, + } + assert.Equal(t, expected, setupScripts) +} From 7808d7cb560d1f647af5f02d98da9002693b5514 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 23:58:14 +0200 Subject: [PATCH 45/47] [#82] Add badges --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 796ccae..12c9e69 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # Drupal 9 CI -[![CircleCI](https://circleci.com/gh/Lullabot/drupal9ci.svg?style=svg)](https://circleci.com/gh/Lullabot/drupal9ci) +![Create release](https://github.com/lullabot/drupal9ci/actions/workflows/create-release/badge.svg) +![Publish Docker image](https://github.com/lullabot/drupal9ci/actions/workflows/publish-docker-image/badge.svg) +![Test](https://github.com/lullabot/drupal9ci/actions/workflows/test/badge.svg) +[![codecov](https://codecov.io/gh/Lullabot/drupal9ci/branch/master/graph/badge.svg?token=akwlXfbC0W)](https://codecov.io/gh/Lullabot/drupal9ci) This repository provides the foundation to implement [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration) in a Drupal 9 project using any of the following CI providers: From cd41095213e15eeb118a055a83520cfd993f2618 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Wed, 6 Jul 2022 23:58:30 +0200 Subject: [PATCH 46/47] [#82] Update codecov action --- .github/workflows/test.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ba7aeea..fe8925a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,5 +34,8 @@ jobs: go-version: '^1.18' - name: Run tests with coverage run: go test -race -coverprofile=coverage.out -covermode=atomic ./... - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 + - uses: codecov/codecov-action@v3 + with: + files: ./coverage.out + fail_ci_if_error: true + verbose: true From 630976525779cce7b0f4e23bd88ea2e9175c18a1 Mon Sep 17 00:00:00 2001 From: Juampy NR Date: Thu, 7 Jul 2022 10:47:15 +0200 Subject: [PATCH 47/47] [#82] Replace Drupal8 Dockerfile with Drupal 9 one --- .gitignore | 1 + Dockerfile | 10 ++-- Dockerfile9 | 57 -------------------- README.md | 11 ++-- coverage.out | 13 ----- dist/bitbucket/bitbucket-pipelines.yml | 6 +-- dist/circleci/.circleci/config.yml | 8 +-- dist/github-actions/.github/workflows/ci.yml | 12 ++--- dist/gitlabci/.gitlab-ci.yml | 12 ++--- dist/travisci/.travis/php-node.dockerfile | 2 +- 10 files changed, 25 insertions(+), 107 deletions(-) delete mode 100644 Dockerfile9 delete mode 100644 coverage.out diff --git a/.gitignore b/.gitignore index 8e4a01e..4f56184 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea drupal9ci +coverage.txt diff --git a/Dockerfile b/Dockerfile index 771293a..7d8bda3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM drupal:8.9-apache +FROM drupal:9-apache RUN apt-get update && apt-get install -y \ git \ @@ -39,16 +39,16 @@ RUN pecl install xdebug && \ RUN wget https://robo.li/robo.phar && \ chmod +x robo.phar && mv robo.phar /usr/local/bin/robo +# Install node. +RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && \ + apt install -y nodejs xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 + # Install Dockerize. ENV DOCKERIZE_VERSION v0.6.0 RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz -# Install ImageMagic to take screenshots. -RUN pecl install imagick && \ - docker-php-ext-enable imagick - # Install Chrome browser. RUN apt-get install --yes gnupg2 apt-transport-https && \ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - && \ diff --git a/Dockerfile9 b/Dockerfile9 deleted file mode 100644 index 7d8bda3..0000000 --- a/Dockerfile9 +++ /dev/null @@ -1,57 +0,0 @@ -FROM drupal:9-apache - -RUN apt-get update && apt-get install -y \ - git \ - imagemagick \ - libmagickwand-dev \ - mariadb-client \ - rsync \ - sudo \ - unzip \ - vim \ - wget && \ - docker-php-ext-install bcmath && \ - docker-php-ext-install mysqli && \ - docker-php-ext-install pdo && \ - docker-php-ext-install pdo_mysql - -# Remove the memory limit for the CLI only. -RUN echo 'memory_limit = -1' > /usr/local/etc/php/php-cli.ini - -# Remove the vanilla Drupal project that comes with this image. -RUN rm -rf ..?* .[!.]* * - -# Install composer. -COPY scripts/composer-installer.sh /tmp/composer-installer.sh -RUN chmod +x /tmp/composer-installer.sh && \ - /tmp/composer-installer.sh && \ - mv composer.phar /usr/local/bin/composer && \ - composer self-update --1 - -# Put a turbo on composer. -RUN composer global require hirak/prestissimo - -# Install XDebug. -RUN pecl install xdebug && \ - docker-php-ext-enable xdebug - -# Install Robo CI. -RUN wget https://robo.li/robo.phar && \ - chmod +x robo.phar && mv robo.phar /usr/local/bin/robo - -# Install node. -RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && \ - apt install -y nodejs xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 - -# Install Dockerize. -ENV DOCKERIZE_VERSION v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ - tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ - rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Install Chrome browser. -RUN apt-get install --yes gnupg2 apt-transport-https && \ - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - && \ - sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \ - apt-get update && \ - apt-get install --yes google-chrome-unstable diff --git a/README.md b/README.md index 12c9e69..2b1ca03 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,8 @@ structure differs from what _drupal-project_ sets up, you will need to adjust the CI scripts. It's also recommended to adjust your project to add a subset of the `settings.php` file into -version control and rely on `settings.local.php` for setting the database connection. See [this -commit](https://github.com/juampynr/drupal8-circleci/commit/817d0b6674c42dba73165b047b6b89d72ee72d11) -which contains these changes among other ones. The CI scripts have their own `settings.local.php` -which is copied at build time into `web/sites/default`. +version control and rely on `settings.local.php` for setting the database connection. The CI scripts +have their own `settings.local.php` which is copied at build time into `web/sites/default`. #### DocumentRoot: web vs docroot @@ -66,9 +64,8 @@ For an overview of the CircleCI features, have a look at #### Using a custom Docker image The [CircleCI configuration file](dist/circleci/.circleci/config.yml) uses a -[custom Docker image](https://hub.docker.com/r/juampynr/drupal8ci/) that extends from -the [official Drupal image](https://hub.docker.com/_/drupal/) and it is [hosted at -Docker Hub](https://hub.docker.com/r/juampynr/drupal8ci/). If this image +[custom Docker image](https://github.com/Lullabot/drupal9ci/pkgs/container/drupal9ci) that extends from +the [official Drupal image](https://hub.docker.com/_/drupal/). If this image does not fit your project's architecture then consider [creating your own image](https://circleci.com/docs/2.0/custom-images/) based out of it. diff --git a/coverage.out b/coverage.out deleted file mode 100644 index 68bb6b7..0000000 --- a/coverage.out +++ /dev/null @@ -1,13 +0,0 @@ -mode: atomic -drupal9ci/scripts/scripts.go:39.35,47.2 1 0 -drupal9ci/scripts/scripts.go:49.39,57.2 1 2 -drupal9ci/scripts/scripts.go:59.93,63.23 3 1 -drupal9ci/scripts/scripts.go:82.2,82.25 1 1 -drupal9ci/scripts/scripts.go:63.23,65.3 1 1 -drupal9ci/scripts/scripts.go:65.8,66.22 1 0 -drupal9ci/scripts/scripts.go:67.18,68.41 1 0 -drupal9ci/scripts/scripts.go:69.17,70.40 1 0 -drupal9ci/scripts/scripts.go:71.22,72.45 1 0 -drupal9ci/scripts/scripts.go:73.17,74.40 1 0 -drupal9ci/scripts/scripts.go:75.17,76.40 1 0 -drupal9ci/scripts/scripts.go:77.11,78.43 1 0 diff --git a/dist/bitbucket/bitbucket-pipelines.yml b/dist/bitbucket/bitbucket-pipelines.yml index efdd38e..b470950 100644 --- a/dist/bitbucket/bitbucket-pipelines.yml +++ b/dist/bitbucket/bitbucket-pipelines.yml @@ -1,4 +1,4 @@ -image: juampynr/drupal8ci:latest +image: ghcr.io/lullabot/drupal9ci:latest pipelines: default: @@ -47,10 +47,6 @@ pipelines: - echo $DB_DUMP_URL - sleep 10 - robo job:build - # The following two lines add node/npm to the juampynr/drupal8ci image. - # They are not needed if you use juampynr/drupal9ci (PHP8). - - curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - - - apt install -y nodejs xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 - vendor/bin/robo job:serve-drupal - vendor/bin/robo job:cypress-tests variables: diff --git a/dist/circleci/.circleci/config.yml b/dist/circleci/.circleci/config.yml index 11593fa..a69cb7d 100644 --- a/dist/circleci/.circleci/config.yml +++ b/dist/circleci/.circleci/config.yml @@ -16,7 +16,7 @@ update_composer: &update_composer ## Defines images and working directory. defaults: &defaults docker: - - image: juampynr/drupal8ci:latest + - image: ghcr.io/lullabot/drupal9ci:latest environment: XDEBUG_MODE: coverage - image: mariadb:10.3 @@ -79,7 +79,6 @@ behat_tests: &behat_tests - save_cache: *save_cache ## Job to run the update path and Cypress tests. -# juampynr/drupal9ci:latest lands with PHP8 and node, so if your project is PHP8 you can remove the `Set up node` step. cypress_tests: &cypress_tests <<: *defaults steps: @@ -87,11 +86,6 @@ cypress_tests: &cypress_tests - *copy_robo - *update_composer - restore_cache: *restore_cache - - run: - name: Setup node - command: | - curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - - apt install -y nodejs xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 - run: name: Run Cypress tests command: robo job:run-cypress-tests diff --git a/dist/github-actions/.github/workflows/ci.yml b/dist/github-actions/.github/workflows/ci.yml index 33f2e70..dfbe771 100644 --- a/dist/github-actions/.github/workflows/ci.yml +++ b/dist/github-actions/.github/workflows/ci.yml @@ -4,7 +4,7 @@ jobs: phpunit: runs-on: ubuntu-latest container: - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest services: mariadb: @@ -32,7 +32,7 @@ jobs: code-standards: runs-on: ubuntu-latest container: - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest steps: - uses: actions/checkout@v1 @@ -51,7 +51,7 @@ jobs: code-coverage: runs-on: ubuntu-latest container: - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest services: mariadb: @@ -86,7 +86,7 @@ jobs: behat: runs-on: ubuntu-latest container: - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest services: mariadb: image: mariadb:latest @@ -117,7 +117,7 @@ jobs: cypress: runs-on: ubuntu-latest container: - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest services: mariadb: image: mariadb:latest @@ -140,7 +140,7 @@ jobs: - name: Build project run: robo job:build - # juampynr/drupal9ci:latest lands with PHP8 and node, so if your project is PHP8 you can remove this step. + # ghcr.io/lullabot/drupal9ci:latest:latest lands with PHP8 and node, so if your project is PHP8 you can remove this step. - name: Setup node run: | curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - diff --git a/dist/gitlabci/.gitlab-ci.yml b/dist/gitlabci/.gitlab-ci.yml index 120ba90..b6403f5 100644 --- a/dist/gitlabci/.gitlab-ci.yml +++ b/dist/gitlabci/.gitlab-ci.yml @@ -23,7 +23,7 @@ stages: # The template for Drupal9CI tests. .drupal9ci_test_template: extends: .cache_strategy_pull - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest stage: test services: - name: mariadb:latest @@ -41,7 +41,7 @@ stages: ## Job to build the environment. drupal9ci:build: extends: .cache_strategy_push - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest stage: build script: - composer global remove hirak/prestissimo && composer self-update --2 @@ -54,7 +54,7 @@ drupal9ci:build: ## Job to check coding standards. drupal9ci:code_sniffer: extends: .cache_strategy_pull - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest script: vendor/bin/robo job:coding-standards artifacts: paths: @@ -82,7 +82,7 @@ drupal9ci:code_coverage: ## Job to run behat. drupal9ci:behat: extends: .drupal9ci_test_template - image: juampynr/drupal8ci:latest + image: ghcr.io/lullabot/drupal9ci:latest variables: FOO: bar # DB_DUMP_URL: "URL to your DB dump" @@ -97,7 +97,7 @@ drupal9ci:behat: ## Job to run cypress. drupal9ci:cypress: extends: .drupal9ci_test_template - image: juampynr/drupal9ci:latest + image: ghcr.io/lullabot/drupal9ci:latest variables: FOO: bar # DB_DUMP_URL: "URL to your DB dump" @@ -107,4 +107,4 @@ drupal9ci:cypress: - vendor/bin/robo job:cypress-tests artifacts: paths: - - cypress \ No newline at end of file + - cypress diff --git a/dist/travisci/.travis/php-node.dockerfile b/dist/travisci/.travis/php-node.dockerfile index 5551a31..a448fe1 100644 --- a/dist/travisci/.travis/php-node.dockerfile +++ b/dist/travisci/.travis/php-node.dockerfile @@ -1,4 +1,4 @@ -FROM juampynr/drupal8ci:latest +FROM ghcr.io/lullabot/drupal9ci:latest RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - RUN apt install -y nodejs xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2