github.com/abayer/test-infra@v0.0.5/experiment/bootstrap/main.go (about)

     1  /*
     2  Copyright 2017 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  // bootstrap implements a drop-in-replacement for jenkins/bootstrap.py
    18  package main
    19  
    20  import (
    21  	"fmt"
    22  	"log"
    23  	"os"
    24  )
    25  
    26  // Constant Keys for known environment variables and URLs
    27  const (
    28  	BuildNumberEnv         string = "BUILD_NUMBER"
    29  	BootstrapEnv           string = "BOOTSTRAP_MIGRATION"
    30  	CloudSDKEnv            string = "CLOUDSDK_CONFIG"
    31  	GCEPrivKeyEnv          string = "JENKINS_GCE_SSH_PRIVATE_KEY_FILE"
    32  	GCEPubKeyEnv           string = "JENKINS_GCE_SSH_PUBLIC_KEY_FILE"
    33  	AWSPrivKeyEnv          string = "JENKINS_AWS_SSH_PRIVATE_KEY_FILE"
    34  	AWSPubKeyEnv           string = "JENKINS_AWS_SSH_PUBLIC_KEY_FILE"
    35  	GubernatorBaseBuildURL string = "https://k8s-gubernator.appspot.com/build/"
    36  	HomeEnv                string = "HOME"
    37  	JenkinsHomeEnv         string = "JENKINS_HOME"
    38  	JobEnv                 string = "JOB_NAME"
    39  	NodeNameEnv            string = "NODE_NAME"
    40  	ServiceAccountEnv      string = "GOOGLE_APPLICATION_CREDENTIALS"
    41  	WorkspaceEnv           string = "WORKSPACE"
    42  	GCSArtifactsEnv        string = "GCS_ARTIFACTS_DIR"
    43  )
    44  
    45  // Bootstrap is the "real main" for bootstrap, after argument parsing
    46  func Bootstrap(args *Args) error {
    47  	repos, err := ParseRepos(args.Repo)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	originalCWD, err := os.Getwd()
    53  	if err != nil {
    54  		return fmt.Errorf("failed to get CWD! %v", err)
    55  	}
    56  
    57  	build := "fake" // TODO: port computing this value
    58  
    59  	var paths *Paths
    60  	if args.Upload != "" {
    61  		if repos.Main().Pull != "" {
    62  			paths, err = PRPaths(args.Upload, repos, args.Job, build)
    63  			if err != nil {
    64  				return err
    65  			}
    66  		} else {
    67  			paths = CIPaths(args.Upload, args.Job, build)
    68  		}
    69  		// TODO(fejta): Replace env var below with a flag eventually.
    70  		os.Setenv(GCSArtifactsEnv, paths.Artifacts)
    71  	}
    72  
    73  	// TODO(bentheelder): mimic the rest of bootstrap.py here ¯\_(ツ)_/¯
    74  	// Printing these so that it compiles ¯\_(ツ)_/¯
    75  	fmt.Println(originalCWD)
    76  	fmt.Println(paths)
    77  	return nil
    78  }
    79  
    80  func main() {
    81  	args, err := ParseArgs(os.Args[1:])
    82  	if err != nil {
    83  		log.Fatalf("error parsing args: %v", err)
    84  	}
    85  	err = Bootstrap(args)
    86  	if err != nil {
    87  		log.Fatalf("bootstrap error: %v", err)
    88  	}
    89  }