github.com/joshdk/godel@v0.0.0-20170529232908-862138a45aee/apps/distgo/config/example_test.go (about) 1 // Copyright 2016 Palantir Technologies, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package config_test 16 17 import ( 18 "fmt" 19 20 "gopkg.in/yaml.v2" 21 22 "github.com/palantir/godel/apps/distgo/config" 23 ) 24 25 func Example_sls() { 26 yml := ` 27 products: 28 cache-service: 29 build: 30 main-pkg: ./main/cache 31 os-archs: 32 - os: linux 33 arch: amd64 34 version-var: main.Version 35 dist: 36 input-dir: cache/dist/sls 37 output-dir: cache/build/distributions 38 dist-type: 39 type: sls 40 info: 41 service-args: "--config var/conf/cache.yml server" 42 manifest-extensions: 43 cache: true 44 reloadable: true 45 group-id: com.palantir.cache` 46 47 cfg := configFromYML(yml) 48 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 49 // Output: "{Products:map[cache-service:{Build:{Skip:false Script: MainPkg:./main/cache OutputDir: BuildArgsScript: VersionVar:main.Version Environment:map[] OSArchs:[linux-amd64]} Run:{Args:[]} Dist:[{OutputDir:cache/build/distributions InputDir:cache/dist/sls InputProducts:[] Script: DistType:{Type:sls Info:{InitShTemplateFile: ManifestTemplateFile: ServiceArgs:--config var/conf/cache.yml server ProductType: ManifestExtensions:map[cache:true] Reloadable:true YMLValidationExclude:{Names:[] Paths:[]}}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DockerImages:[] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.cache Exclude:{Names:[] Paths:[]}}" 50 } 51 52 func Example_bin() { 53 yml := ` 54 products: 55 godel: 56 build: 57 main-pkg: ./cmd/godel 58 environment: 59 CGO_ENABLED: "0" 60 os-archs: 61 - os: darwin 62 arch: amd64 63 - os: linux 64 arch: amd64 65 version-var: main.Version 66 dist: 67 dist-type: 68 type: bin 69 info: 70 omit-init-sh: true 71 script: | 72 function setup_wrapper { 73 # logic for function (omitted for brevity) 74 } 75 76 # copy contents of resources directory 77 mkdir -p "$DIST_DIR/wrapper" 78 setup_wrapper "$DIST_DIR/wrapper" 79 group-id: com.palantir.godel` 80 81 cfg := configFromYML(yml) 82 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 83 // Output: "{Products:map[godel:{Build:{Skip:false Script: MainPkg:./cmd/godel OutputDir: BuildArgsScript: VersionVar:main.Version Environment:map[CGO_ENABLED:0] OSArchs:[darwin-amd64 linux-amd64]} Run:{Args:[]} Dist:[{OutputDir: InputDir: InputProducts:[] Script:function setup_wrapper {\n # logic for function (omitted for brevity)\n}\n\n# copy contents of resources directory\nmkdir -p \"$DIST_DIR/wrapper\"\nsetup_wrapper \"$DIST_DIR/wrapper\"\n DistType:{Type:bin Info:{OmitInitSh:true InitShTemplateFile:}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DockerImages:[] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.godel Exclude:{Names:[] Paths:[]}}" 84 } 85 86 func Example_manual() { 87 yml := ` 88 products: 89 godel: 90 build: 91 skip: true 92 dist: 93 dist-type: 94 type: manual 95 info: 96 extension: tgz 97 script: | 98 # filler/dummy example. Real operation should perform dist or packaging 99 # operation. Important thing is that output must be at "$DIST_DIR/$PRODUCT-$VERSION.[extension]". 100 echo "test-dist-contents" > "$DIST_DIR/$PRODUCT-$VERSION.tgz" 101 group-id: com.palantir.godel` 102 103 cfg := configFromYML(yml) 104 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 105 // Output: "{Products:map[godel:{Build:{Skip:true Script: MainPkg: OutputDir: BuildArgsScript: VersionVar: Environment:map[] OSArchs:[]} Run:{Args:[]} Dist:[{OutputDir: InputDir: InputProducts:[] Script:# filler/dummy example. Real operation should perform dist or packaging\n# operation. Important thing is that output must be at \"$DIST_DIR/$PRODUCT-$VERSION.[extension]\".\necho \"test-dist-contents\" > \"$DIST_DIR/$PRODUCT-$VERSION.tgz\"\n DistType:{Type:manual Info:{Extension:tgz}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DockerImages:[] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.godel Exclude:{Names:[] Paths:[]}}" 106 } 107 108 func Example_rpm() { 109 yml := ` 110 products: 111 orchestrator: 112 dist: 113 input-dir: ./rpm 114 dist-type: 115 type: rpm 116 info: 117 config-files: 118 - /usr/lib/systemd/system/orchestrator.service 119 before-install-script: | 120 /usr/bin/getent group orchestrator || /usr/sbin/groupadd \ 121 -g 380 orchestrator 122 /usr/bin/getent passwd orchestrator || /usr/sbin/useradd -r \ 123 -d /var/lib/orchestrator -g orchestrator -u 380 -m \ 124 -s /sbin/nologin orchestrator 125 after-install-script: | 126 systemctl daemon-reload 127 after-remove-script: | 128 systemctl daemon-reload 129 script: | 130 mkdir "$DIST_DIR"/usr/libexec/orchestrator 131 cp build/linux-amd64/orchestrator "$DIST_DIR"/usr/libexec/orchestrator 132 group-id: com.palantir.pcloud` 133 134 cfg := configFromYML(yml) 135 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 136 // Output: "{Products:map[orchestrator:{Build:{Skip:false Script: MainPkg: OutputDir: BuildArgsScript: VersionVar: Environment:map[] OSArchs:[]} Run:{Args:[]} Dist:[{OutputDir: InputDir:./rpm InputProducts:[] Script:mkdir \"$DIST_DIR\"/usr/libexec/orchestrator\ncp build/linux-amd64/orchestrator \"$DIST_DIR\"/usr/libexec/orchestrator\n DistType:{Type:rpm Info:{Release: ConfigFiles:[/usr/lib/systemd/system/orchestrator.service] BeforeInstallScript:/usr/bin/getent group orchestrator || /usr/sbin/groupadd \\\n -g 380 orchestrator\n/usr/bin/getent passwd orchestrator || /usr/sbin/useradd -r \\\n -d /var/lib/orchestrator -g orchestrator -u 380 -m \\\n -s /sbin/nologin orchestrator\n AfterInstallScript:systemctl daemon-reload\n AfterRemoveScript:systemctl daemon-reload\n}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DockerImages:[] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.pcloud Exclude:{Names:[] Paths:[]}}" 137 } 138 139 func Example_docker() { 140 yml := ` 141 products: 142 godel: 143 build: 144 main-pkg: ./cmd/godel 145 environment: 146 CGO_ENABLED: "0" 147 os-archs: 148 - os: darwin 149 arch: amd64 150 - os: linux 151 arch: amd64 152 version-var: main.Version 153 dist: 154 dist-type: 155 type: bin 156 info: 157 omit-init-sh: true 158 script: | 159 function setup_wrapper { 160 # logic for function (omitted for brevity) 161 } 162 163 # copy contents of resources directory 164 mkdir -p "$DIST_DIR/wrapper" 165 setup_wrapper "$DIST_DIR/wrapper" 166 docker: 167 - 168 repository: palantir/godel 169 tag: latest 170 context-dir: path/to/context/dir 171 group-id: com.palantir.godel` 172 173 cfg := configFromYML(yml) 174 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 175 // Output: "{Products:map[godel:{Build:{Skip:false Script: MainPkg:./cmd/godel OutputDir: BuildArgsScript: VersionVar:main.Version Environment:map[CGO_ENABLED:0] OSArchs:[darwin-amd64 linux-amd64]} Run:{Args:[]} Dist:[{OutputDir: InputDir: InputProducts:[] Script:function setup_wrapper {\n # logic for function (omitted for brevity)\n}\n\n# copy contents of resources directory\nmkdir -p \"$DIST_DIR/wrapper\"\nsetup_wrapper \"$DIST_DIR/wrapper\"\n DistType:{Type:bin Info:{OmitInitSh:true InitShTemplateFile:}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DockerImages:[{Repository:palantir/godel Tag:latest ContextDir:path/to/context/dir Deps:[]}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.godel Exclude:{Names:[] Paths:[]}}" 176 } 177 178 func configFromYML(yml string) config.Project { 179 cfg := config.Project{} 180 if err := yaml.Unmarshal([]byte(yml), &cfg); err != nil { 181 panic(err) 182 } 183 if _, err := cfg.ToParams(); err != nil { 184 panic(err) 185 } 186 return cfg 187 }