// Copyright 2016-2018, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "fmt" "os" "runtime" "runtime/debug" "github.com/pulumi/pulumi/cmd" "github.com/pulumi/pulumi/pkg/util/contract" "github.com/pulumi/pulumi/pkg/version" ) func panicHandler() { if panicPayload := recover(); panicPayload != nil { stack := string(debug.Stack()) fmt.Fprintln(os.Stderr, "================================================================================") fmt.Fprintln(os.Stderr, "The Pulumi CLI encountered a fatal error. This is a bug!") fmt.Fprintln(os.Stderr, "We would appreciate a report: https://github.com/pulumi/pulumi/issues/") fmt.Fprintln(os.Stderr, "Please provide all of the below text in your report.") fmt.Fprintln(os.Stderr, "================================================================================") fmt.Fprintf(os.Stderr, "Pulumi Version: %s\n", version.Version) fmt.Fprintf(os.Stderr, "Go Version: %s\n", runtime.Version()) fmt.Fprintf(os.Stderr, "Go Compiler: %s\n", runtime.Compiler) fmt.Fprintf(os.Stderr, "Architecture: %s\n", runtime.GOARCH) fmt.Fprintf(os.Stderr, "Operating System: %s\n", runtime.GOOS) fmt.Fprintf(os.Stderr, "Panic: %s\n\n", panicPayload) fmt.Fprintln(os.Stderr, stack) os.Exit(1) } } func main() { defer panicHandler() if err := cmd.NewPulumiCmd().Execute(); err != nil { _, err = fmt.Fprintf(os.Stderr, "An error occurred: %v\n", err) contract.IgnoreError(err) os.Exit(1) } }