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  }