Skip to content

Commit

Permalink
Merge branch 'master' into fraser/shimlessGo
Browse files Browse the repository at this point in the history
  • Loading branch information
AaronFriel committed Oct 5, 2022
2 parents aa4cd71 + 0dae69b commit 46c22f3
Show file tree
Hide file tree
Showing 44 changed files with 3,284 additions and 483 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/ci-lint.yml
Expand Up @@ -28,6 +28,14 @@ jobs:
- uses: actions/checkout@v3
with:
ref: ${{ inputs.ref }}
- name: Tidy
run: make tidy
- name: Fail if go mod not tidy
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "::error go.mod not tidy"
exit 1
fi
- name: Lint
run: make lint

Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/release-homebrew-tap.yml
Expand Up @@ -37,6 +37,7 @@ on:

env:
PULUMI_VERSION: ${{ inputs.version }}
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}

jobs:
update-homebrew-tap:
Expand Down Expand Up @@ -79,8 +80,6 @@ jobs:
- name: Push formula
working-directory: homebrew-tap
if: ${{ !inputs.dry-run }}
env:
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
run: |
set -euo pipefail
Expand Down
2 changes: 1 addition & 1 deletion .version
@@ -1 +1 @@
3.40.3
3.41.1
2 changes: 1 addition & 1 deletion .vscode/settings.json
@@ -1,5 +1,5 @@
{
"go.buildTags": "all",
"go.buildTags": "all,smoke",
"go.testTimeout": "1h",
"gopls": {
// A couple of modules get copied as part of builds and this confuse gopls as it sees the module name twice, just ignore the copy in the build folders.
Expand Down
6 changes: 6 additions & 0 deletions changelog/pending/20220927--sdk-go--install-deps-1-18.yaml
@@ -0,0 +1,6 @@
changes:
- type: fix
scope: sdk/go
description: >
Go programs run with Go 1.17 or below failed due to go mod tidy being run with -compat=1.18. The
change is reverted.
4 changes: 4 additions & 0 deletions changelog/pending/20220927--sdk-yaml--yaml-0-5-9.yaml
@@ -0,0 +1,4 @@
changes:
- type: feat
scope: yaml
description: "[Updates Pulumi YAML to v0.5.9](https://github.com/pulumi/pulumi-yaml/releases/tag/v0.5.8)"
6 changes: 6 additions & 0 deletions changelog/pending/20220928--sdk-go--unsafe-await.yaml
@@ -0,0 +1,6 @@
changes:
- type: feat
scope: sdk/go
description: >
Adds an `UnsafeAwaitOutput` function to the Go SDK. This permits a workaround for component
providers and other advanced scenarios where resources created are conditional on an output.
@@ -0,0 +1,7 @@
changes:
- type: feat
scope: cli/about,plugin
description: >
Remove experimental feature for plugins from private github releases.
This is now supported by `github:` plugin urls, see
https://www.pulumi.com/docs/guides/pulumi-packages/how-to-author/#support-for-github-releases.
4 changes: 4 additions & 0 deletions changelog/pending/20221003--backend--issue-7251.yaml
@@ -0,0 +1,4 @@
changes:
- type: feat
scope: backend
description: Allows CLI auth for Azure blob storage
4 changes: 4 additions & 0 deletions changelog/pending/20221003--sdk-python--python-invoke.yaml
@@ -0,0 +1,4 @@
changes:
- type: feat
scope: sdk/python
description: Add invoke to Provider interface.
@@ -0,0 +1,4 @@
changes:
- type: fix
scope: sdk/python
description: Fix KeyError in UpdateSummary.
4 changes: 4 additions & 0 deletions changelog/pending/20221004--sdk-python--python-format.yaml
@@ -0,0 +1,4 @@
changes:
- type: feat
scope: sdk/python
description: Add Output.format to the python SDK.
8 changes: 0 additions & 8 deletions pkg/backend/filestate/crypto.go
Expand Up @@ -26,14 +26,6 @@ func NewPassphraseSecretsManager(stackName tokens.Name, configFile string,
rotatePassphraseSecretsProvider bool) (secrets.Manager, error) {
contract.Assertf(stackName != "", "stackName %s", "!= \"\"")

if configFile == "" {
f, err := workspace.DetectProjectStackPath(stackName.Q())
if err != nil {
return nil, err
}
configFile = f
}

info, err := workspace.LoadProjectStack(configFile)
if err != nil {
return nil, err
Expand Down
8 changes: 0 additions & 8 deletions pkg/backend/httpstate/crypto.go
Expand Up @@ -25,14 +25,6 @@ import (
func NewServiceSecretsManager(s Stack, stackName tokens.Name, configFile string) (secrets.Manager, error) {
contract.Assertf(stackName != "", "stackName %s", "!= \"\"")

if configFile == "" {
f, err := workspace.DetectProjectStackPath(stackName.Q())
if err != nil {
return nil, err
}
configFile = f
}

info, err := workspace.LoadProjectStack(configFile)
if err != nil {
return nil, err
Expand Down
141 changes: 72 additions & 69 deletions pkg/cmd/pulumi/convert.go
Expand Up @@ -52,80 +52,12 @@ func newConvertCmd() *cobra.Command {
"\n" +
"The YAML program to convert will default to the manifest in the current working directory.\n",
Run: cmdutil.RunResultFunc(func(cmd *cobra.Command, args []string) result.Result {

var projectGenerator projectGeneratorFunc
switch language {
case "csharp", "c#":
projectGenerator = dotnet.GenerateProject
case "go":
projectGenerator = gogen.GenerateProject
case "typescript":
projectGenerator = nodejs.GenerateProject
case "python": // nolint: goconst
projectGenerator = python.GenerateProject
case "java": // nolint: goconst
projectGenerator = javagen.GenerateProject
case "yaml": // nolint: goconst
projectGenerator = yamlgen.GenerateProject
default:
return result.Errorf("cannot generate programs for %q language", language)
}

cwd, err := os.Getwd()
if err != nil {
return result.FromError(fmt.Errorf("could not resolve current working directory"))
}

if outDir != "." {
err := os.MkdirAll(outDir, 0755)
if err != nil {
return result.FromError(fmt.Errorf("could not create output directory: %w", err))
}
}

host, err := newPluginHost()
if err != nil {
return result.FromError(fmt.Errorf("could not create plugin host: %w", err))
}
defer contract.IgnoreClose(host)
loader := schema.NewPluginLoader(host)
proj, pclProgram, err := yamlgen.Eject(cwd, loader)
if err != nil {
return result.FromError(fmt.Errorf("could not load yaml program: %w", err))
}

err = projectGenerator(outDir, *proj, pclProgram)
if err != nil {
return result.FromError(fmt.Errorf("could not generate output program: %w", err))
}

// Project should now exist at outDir. Run installDependencies in that directory
// Change the working directory to the specified directory.
if err := os.Chdir(outDir); err != nil {
return result.FromError(fmt.Errorf("changing the working directory: %w", err))
}

// Load the project, to
proj, root, err := readProject()
if err != nil {
return result.FromError(err)
}

projinfo := &engine.Projinfo{Proj: proj, Root: root}
pwd, _, ctx, err := engine.ProjectInfoContext(projinfo, nil, cmdutil.Diag(), cmdutil.Diag(), false, nil)
if err != nil {
return result.FromError(err)
}

defer ctx.Close()

if !generateOnly {
if err := installDependencies(ctx, &proj.Runtime, pwd); err != nil {
return result.FromError(err)
}
}

return nil
return runConvert(cwd, language, outDir, generateOnly)
}),
}

Expand All @@ -147,6 +79,77 @@ func newConvertCmd() *cobra.Command {
return cmd
}

func runConvert(cwd string, language string, outDir string, generateOnly bool) result.Result {
var projectGenerator projectGeneratorFunc
switch language {
case "csharp", "c#":
projectGenerator = dotnet.GenerateProject
case "go":
projectGenerator = gogen.GenerateProject
case "typescript":
projectGenerator = nodejs.GenerateProject
case "python": // nolint: goconst
projectGenerator = python.GenerateProject
case "java": // nolint: goconst
projectGenerator = javagen.GenerateProject
case "yaml": // nolint: goconst
projectGenerator = yamlgen.GenerateProject
default:
return result.Errorf("cannot generate programs for %q language", language)
}

if outDir != "." {
err := os.MkdirAll(outDir, 0755)
if err != nil {
return result.FromError(fmt.Errorf("could not create output directory: %w", err))
}
}

host, err := newPluginHost()
if err != nil {
return result.FromError(fmt.Errorf("could not create plugin host: %w", err))
}
defer contract.IgnoreClose(host)
loader := schema.NewPluginLoader(host)
proj, pclProgram, err := yamlgen.Eject(cwd, loader)
if err != nil {
return result.FromError(fmt.Errorf("could not load yaml program: %w", err))
}

err = projectGenerator(outDir, *proj, pclProgram)
if err != nil {
return result.FromError(fmt.Errorf("could not generate output program: %w", err))
}

// Project should now exist at outDir. Run installDependencies in that directory
// Change the working directory to the specified directory.
if err := os.Chdir(outDir); err != nil {
return result.FromError(fmt.Errorf("changing the working directory: %w", err))
}

// Load the project, to
proj, root, err := readProject()
if err != nil {
return result.FromError(err)
}

projinfo := &engine.Projinfo{Proj: proj, Root: root}
pwd, _, ctx, err := engine.ProjectInfoContext(projinfo, nil, cmdutil.Diag(), cmdutil.Diag(), false, nil)
if err != nil {
return result.FromError(err)
}

// defer ctx.Close()

if !generateOnly {
if err := installDependencies(ctx, &proj.Runtime, pwd); err != nil {
return result.FromError(err)
}
}

return nil
}

func newPluginHost() (plugin.Host, error) {
cwd, err := os.Getwd()
if err != nil {
Expand Down
33 changes: 33 additions & 0 deletions pkg/cmd/pulumi/convert_test.go
@@ -0,0 +1,33 @@
package main

import (
"os"
"testing"

"github.com/stretchr/testify/require"
)

// TestConvert is an entrypoint for debugging `pulumi convert“. To use this with an editor such as
// VS Code, drop a Pulumi.yaml in the convert_testdata folder and with the VS Code Go extension, the
// code lens (grayed out text above TestConvert) should display an option to "debug test".
//
// This is ideal for debugging panics in the convert command, as the debugger will break on the
// panic.
//
// See: https://github.com/golang/vscode-go/wiki/debugging
//
// Your mileage may vary with other tooling.
func TestConvert(t *testing.T) {
t.Parallel()

if info, err := os.Stat("convert_testdata/Pulumi.yaml"); err != nil && os.IsNotExist(err) {
t.Skip("skipping test, no Pulumi.yaml found")
} else if err != nil {
t.Fatalf("failed to stat Pulumi.yaml: %v", err)
} else if info.IsDir() {
t.Fatalf("Pulumi.yaml is a directory, not a file")
}

result := runConvert("convert_testdata", "go", "convert_testdata/go", true)
require.Nil(t, result, "convert failed: %v", result)
}
2 changes: 2 additions & 0 deletions pkg/cmd/pulumi/convert_testdata/.gitignore
@@ -0,0 +1,2 @@
*
!.gitignore
12 changes: 8 additions & 4 deletions pkg/cmd/pulumi/crypto.go
Expand Up @@ -51,16 +51,20 @@ func getStackSecretsManager(s backend.Stack) (secrets.Manager, error) {
}

sm, err := func() (secrets.Manager, error) {
configFile, err := getProjectStackPath(s)
if err != nil {
return nil, err
}

if ps.SecretsProvider != passphrase.Type && ps.SecretsProvider != "default" && ps.SecretsProvider != "" {
return newCloudSecretsManager(s.Ref().Name(), stackConfigFile, ps.SecretsProvider)
return newCloudSecretsManager(s.Ref().Name(), configFile, ps.SecretsProvider)
}

if ps.EncryptionSalt != "" {
return filestate.NewPassphraseSecretsManager(s.Ref().Name(), stackConfigFile,
false /* rotatePassphraseSecretsProvider */)
return filestate.NewPassphraseSecretsManager(s.Ref().Name(), configFile, false /* rotatePassphraseSecretsProvider */)
}

return s.DefaultSecretManager(stackConfigFile)
return s.DefaultSecretManager(configFile)
}()
if err != nil {
return nil, err
Expand Down
8 changes: 0 additions & 8 deletions pkg/cmd/pulumi/crypto_cloud.go
Expand Up @@ -28,14 +28,6 @@ import (
func newCloudSecretsManager(stackName tokens.Name, configFile, secretsProvider string) (secrets.Manager, error) {
contract.Assertf(stackName != "", "stackName %s", "!= \"\"")

if configFile == "" {
f, err := workspace.DetectProjectStackPath(stackName.Q())
if err != nil {
return nil, err
}
configFile = f
}

info, err := workspace.LoadProjectStack(configFile)
if err != nil {
return nil, err
Expand Down
3 changes: 2 additions & 1 deletion pkg/cmd/pulumi/pulumi.go
Expand Up @@ -382,7 +382,8 @@ func checkForUpdate(ctx context.Context) *diag.Diag {

latestVer, oldestAllowedVer, err := getCLIVersionInfo(ctx)
if err != nil {
logging.V(3).Infof("error fetching latest version information: %s", err)
logging.V(3).Infof("error fetching latest version information "+
"(set `PULUMI_SKIP_UPDATE_CHECK=true` to skip update checks): %s", err)
}

if oldestAllowedVer.GT(curVer) {
Expand Down

0 comments on commit 46c22f3

Please sign in to comment.