github.com/jdhenke/godel@v0.0.0-20161213181855-abeb3861bf0d/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  group-id: com.palantir.cache`
    45  
    46  	cfg := configFromYML(yml)
    47  	fmt.Printf("%q", fmt.Sprintf("%+v", cfg))
    48  	// Output: "{Products:map[cache-service:{Build:{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] YMLValidationExclude:{Names:[] Paths:[]}}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.cache Exclude:{Names:[] Paths:[]}}"
    49  }
    50  
    51  func Example_bin() {
    52  	yml := `
    53  products:
    54    godel:
    55      build:
    56        main-pkg: ./cmd/godel
    57        environment:
    58          CGO_ENABLED: "0"
    59        os-archs:
    60          - os: darwin
    61            arch: amd64
    62          - os: linux
    63            arch: amd64
    64        version-var: main.Version
    65      dist:
    66        dist-type:
    67          type: bin
    68          info:
    69            omit-init-sh: true
    70        script: |
    71                function setup_wrapper {
    72                  # logic for function (omitted for brevity)
    73                }
    74  
    75                # copy contents of resources directory
    76                mkdir -p "$DIST_DIR/wrapper"
    77                setup_wrapper "$DIST_DIR/wrapper"
    78  group-id: com.palantir.godel`
    79  
    80  	cfg := configFromYML(yml)
    81  	fmt.Printf("%q", fmt.Sprintf("%+v", cfg))
    82  	// Output: "{Products:map[godel:{Build:{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:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.godel Exclude:{Names:[] Paths:[]}}"
    83  }
    84  
    85  func Example_rpm() {
    86  	yml := `
    87  products:
    88    orchestrator:
    89      dist:
    90        input-dir: ./rpm
    91        dist-type:
    92          type: rpm
    93          info:
    94            config-files:
    95              - /usr/lib/systemd/system/orchestrator.service
    96            before-install-script: |
    97                /usr/bin/getent group orchestrator || /usr/sbin/groupadd \
    98                        -g 380 orchestrator
    99                /usr/bin/getent passwd orchestrator || /usr/sbin/useradd -r \
   100                        -d /var/lib/orchestrator -g orchestrator -u 380 -m \
   101                        -s /sbin/nologin orchestrator
   102            after-install-script: |
   103                systemctl daemon-reload
   104            after-remove-script: |
   105                systemctl daemon-reload
   106        script: |
   107            mkdir "$DIST_DIR"/usr/libexec/orchestrator
   108            cp build/linux-amd64/orchestrator "$DIST_DIR"/usr/libexec/orchestrator
   109  group-id: com.palantir.pcloud`
   110  
   111  	cfg := configFromYML(yml)
   112  	fmt.Printf("%q", fmt.Sprintf("%+v", cfg))
   113  	// Output: "{Products:map[orchestrator:{Build:{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:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.pcloud Exclude:{Names:[] Paths:[]}}"
   114  }
   115  
   116  func configFromYML(yml string) config.Project {
   117  	cfg := config.Project{}
   118  	if err := yaml.Unmarshal([]byte(yml), &cfg); err != nil {
   119  		panic(err)
   120  	}
   121  	if _, err := cfg.ToParams(); err != nil {
   122  		panic(err)
   123  	}
   124  	return cfg
   125  }