Skip to content

Commit

Permalink
Merge pull request #2290 from carolynvs/allow-mixin-config
Browse files Browse the repository at this point in the history
Retrieve mixin configuration schema from mixins
  • Loading branch information
carolynvs authored Sep 2, 2022
2 parents 588b8fd + 7165689 commit 1b74eb6
Show file tree
Hide file tree
Showing 22 changed files with 1,393 additions and 93 deletions.
37 changes: 37 additions & 0 deletions cmd/testmixin/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package main

import (
_ "embed"
"fmt"
"os"
)

//go:embed schema.json
var schema string

//go:embed version.txt
var version string

func main() {
if len(os.Args) < 2 {
return
}

command := os.Args[1]
switch command {
case "version":
fmt.Println(version)
case "schema":
// This is a mixin that helps us test out our schema command
fmt.Println(schema)
case "lint":
fmt.Println("[]")
case "build":
fmt.Println("# testmixin")
case "run":
fmt.Println("running testmixin...")
default:
fmt.Println("unsupported command:", command)
os.Exit(1)
}
}
112 changes: 112 additions & 0 deletions cmd/testmixin/schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"config": {
"description": "Configuration that can be set when the mixin is declared",
"type": "object",
"properties": {
"testmixin": {
"description": "test mixin configuration",
"type": "object",
"properties": {
"clientVersion": {
"description": "Version of the client to install in the bundle",
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"installStep": {
"type": "object",
"properties": {
"testmixin": {
"$ref": "#/definitions/testmixin"
}
},
"additionalProperties": false,
"required": [
"testmixin"
]
},
"upgradeStep": {
"type": "object",
"properties": {
"testmixin": {
"$ref": "#/definitions/testmixin"
}
},
"additionalProperties": false,
"required": [
"testmixin"
]
},
"invokeStep": {
"type": "object",
"properties": {
"testmixin": {
"$ref": "#/definitions/testmixin"
}
},
"additionalProperties": false,
"required": [
"testmixin"
]
},
"uninstallStep": {
"type": "object",
"properties": {
"testmixin": {
"$ref": "#/definitions/testmixin"
}
},
"additionalProperties": false,
"required": [
"testmixin"
]
},
"testmixin": {
"description": "A step that is executed by the test mixin",
"type": "object",
"properties": {
"description": {
"description": "A description of the mixin step",
"type": "string"
}
},
"additionalProperties": false,
"required": [
"description"
]
}
},
"type": "object",
"properties": {
"install": {
"type": "array",
"items": {
"$ref": "#/definitions/installStep"
}
},
"upgrade": {
"type": "array",
"items": {
"$ref": "#/definitions/upgradeStep"
}
},
"uninstall": {
"type": "array",
"items": {
"$ref": "#/definitions/uninstallStep"
}
}
},
"additionalProperties": {
"type": "array",
"items": {
"$ref": "#/definitions/invokeStep"
}
}
}
6 changes: 6 additions & 0 deletions cmd/testmixin/version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "testmixin",
"version": "v0.1.0",
"commit": "abc123",
"author": "Porter Authors"
}
40 changes: 40 additions & 0 deletions docs/content/mixin-dev-guide/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,46 @@ install:
command: ./helpers.sh
```
If your mixin supports additional configuration when it is declared in porter.yaml,
you should define that in your schema in the "config" definition.
Here is an example of how the Kubernetes mixin schema defines its configuration schema:
```yaml
mixins:
- kubernetes:
clientVersion: 1.2.3
```
Below is a partial json schema for the Kubernetes mixin that only shows the config section.
The config section should contain a single property named after the mixin, that contains the mixin's configuration schema.
```json
{
"definitions": {
"config": {
"description": "Configuration that can be set when the mixin is declared",
"type": "object",
"properties": {
"kubernetes": {
"description": "kubernetes mixin configuration",
"type": "object",
"properties": {
"clientVersion": {
"description": "Version of kubectl to install in the bundle",
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
}
}
```


The [mixin skeleton template][skeletor] provides an example implementation, unit tests
and an integration test to validate your implementation. After you have customized
your schema command, you can test it out with the [Porter extension](https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.porter-vscode)
Expand Down
9 changes: 7 additions & 2 deletions magefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ func TestUnit() {

// Run smoke tests to quickly check if Porter is broken
func TestSmoke() error {
mg.Deps(copySchema, TryRegisterLocalHostAlias, docker.RestartDockerRegistry)
mg.Deps(copySchema, TryRegisterLocalHostAlias, docker.RestartDockerRegistry, BuildTestMixin)

// Only do verbose output of tests when called with `mage -v TestSmoke`
v := ""
Expand Down Expand Up @@ -432,7 +432,7 @@ func chmodRecursive(name string, mode os.FileMode) error {

// Run integration tests (slow).
func TestIntegration() {
mg.Deps(tests.EnsureTestCluster, copySchema, BuildTestPlugin, TryRegisterLocalHostAlias)
mg.Deps(tests.EnsureTestCluster, copySchema, TryRegisterLocalHostAlias, BuildTestMixin, BuildTestPlugin)

var run string
runTest := os.Getenv("PORTER_RUN_TEST")
Expand Down Expand Up @@ -469,6 +469,11 @@ func BuildTestPlugin() {
must.RunV("go", "build", "-o", "bin/testplugin", "./cmd/testplugin")
}

func BuildTestMixin() {
os.MkdirAll("bin/mixins/testmixin", 0770)
must.RunV("go", "build", "-o", "bin/mixins/testmixin/testmixin"+xplat.FileExt(), "./cmd/testmixin")
}

// Copy the locally built porter and exec binaries to PORTER_HOME
func Install() {
porterHome := getPorterHome()
Expand Down
2 changes: 1 addition & 1 deletion pkg/cnab/config-adapter/testdata/mybuns.bundle.json
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@
"version": "v1.2.3"
}
},
"manifest": "IyBUaGlzIGlzIGEgdGVzdCBidW5kbGUgdGhhdCBtYWtlcyBubyBsb2dpY2FsIHNlbnNlLCBidXQgaXQgZG9lcyBleGVyY2lzZSBsb3RzIG9mIGRpZmZlcmVudCBidW5kbGUgZmVhdHVyZXMKCnNjaGVtYVZlcnNpb246IDEuMC4wCm5hbWU6IG15YnVucwp2ZXJzaW9uOiAwLjEuMgpkZXNjcmlwdGlvbjogIkEgdmVyeSB0aG9yb3VnaCB0ZXN0IGJ1bmRsZSIKcmVnaXN0cnk6IGxvY2FsaG9zdDo1MDAwCmRvY2tlcmZpbGU6IERvY2tlcmZpbGUudG1wbAoKcmVxdWlyZWQ6CiAgLSBkb2NrZXIKCmNyZWRlbnRpYWxzOgogIC0gbmFtZTogdXNlcm5hbWUKICAgIGRlc2NyaXB0aW9uOiAiVGhlIG5hbWUgeW91IHdhbnQgb24gdGhlIGF1ZGl0IGxvZyIKICAgIGVudjogVVNFUk5BTUUKCnBhcmFtZXRlcnM6CiAgLSBuYW1lOiBsb2dfbGV2ZWwKICAgIGRlc2NyaXB0aW9uOiAiSG93IHVuaGVscGZ1bCB3b3VsZCB5b3UgbGlrZSB0aGUgbG9ncyB0byBiZT8iCiAgICB0eXBlOiBpbnRlZ2VyCiAgICBtaW5pbXVtOiAxCiAgICBtYXhpbXVtOiAxMQogICAgZGVmYXVsdDogNQogIC0gbmFtZTogcGFzc3dvcmQKICAgIGRlc2NyaXB0aW9uOiAiVGhlIHN1cGVyIHNlY3JldCBkYXRhIgogICAgdHlwZTogc3RyaW5nCiAgICBkZWZhdWx0OiAiZGVmYXV0bC1zZWNyZXQiCiAgICBzZW5zaXRpdmU6IHRydWUKICAtIG5hbWU6IGNoYW9zX21vbmtleQogICAgZGVzY3JpcHRpb246ICJTZXQgdG8gdHJ1ZSB0byBtYWtlIHRoZSBidW5kbGUgZmFpbCIKICAgIHR5cGU6IGJvb2xlYW4KICAgIGRlZmF1bHQ6IGZhbHNlCiAgLSBuYW1lOiBjZmcKICAgIGRlc2NyaXB0aW9uOiAiQSBqc29uIGNvbmZpZyBmaWxlIgogICAgdHlwZTogZmlsZQogICAgZGVmYXVsdDogJycKICAgIHBhdGg6IGJ1bmNmZy5qc29uCgpvdXRwdXRzOgogIC0gbmFtZTogbXlsb2dzCiAgICBhcHBseVRvOgogICAgICAtIGluc3RhbGwKICAgICAgLSB1cGdyYWRlCiAgLSBuYW1lOiByZXN1bHQKICAgIGFwcGx5VG86CiAgICAgIC0gaW5zdGFsbAogICAgICAtIHVwZ3JhZGUKICAgIHNlbnNpdGl2ZTogdHJ1ZQoKc3RhdGU6CiAgLSBuYW1lOiBtYWdpY19maWxlCiAgICBwYXRoOiBtYWdpYy50eHQKCmRlcGVuZGVuY2llczoKICByZXF1aXJlczoKICAgIC0gbmFtZTogZGIKICAgICAgYnVuZGxlOgogICAgICAgIHJlZmVyZW5jZTogImxvY2FsaG9zdDo1MDAwL215ZGI6djAuMS4wIgogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIGRhdGFiYXNlOiBiaWdkYgoKaW1hZ2VzOgogIHdoYWxlc2F5ZDoKICAgIGRlc2NyaXB0aW9uOiAiV2hhbGVzYXkgYXMgYSBzZXJ2aWNlIgogICAgaW1hZ2VUeXBlOiAiZG9ja2VyIgogICAgcmVwb3NpdG9yeTogY2Fyb2x5bnZzL3doYWxlc2F5ZAogICAgdGFnOiAibGF0ZXN0IgoKbWl4aW5zOgogIC0gZXhlYwoKY3VzdG9tQWN0aW9uczoKICBkcnktcnVuOgogICAgZGVzY3JpcHRpb246ICJNYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGJlZm9yZSB5b3UgcnVuIGl0IgogICAgc3RhdGVsZXNzOiB0cnVlCiAgICBtb2RpZmllczogZmFsc2UKICBzdGF0dXM6CiAgICBkZXNjcmlwdGlvbjogIlByaW50IHRoZSBpbnN0YWxsYXRpb24gc3RhdHVzIgogICAgc3RhdGVsZXNzOiBmYWxzZQogICAgbW9kaWZpZXM6IGZhbHNlCgppbnN0YWxsOgogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJDaGVjayB0aGUgZG9ja2VyIHNvY2tldCIKICAgICAgY29tbWFuZDogc3RhdAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAvdmFyL3J1bi9kb2NrZXIuc29jawogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJMZXQncyBtYWtlIHNvbWUgbWFnaWMiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBtYWtlTWFnaWMKICAgICAgICAtICIkeyBidW5kbGUuY3JlZGVudGlhbHMudXNlcm5hbWUgfSBpcyBhIHVuaWNvcm4gd2l0aCAkeyBidW5kbGUucGFyYW1ldGVycy5wYXNzd29yZCB9IHNlY3JldC4iCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogImluc3RhbGwiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBpbnN0YWxsCiAgICAgIG91dHB1dHM6CiAgICAgICAgLSBuYW1lOiBteWxvZ3MKICAgICAgICAgIHJlZ2V4OiAiKC4qKSIKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAicm9sbCB0aGUgZGljZSB3aXRoIHlvdXIgY2hhb3MgbW9ua2V5IgogICAgICBjb21tYW5kOiAuL2hlbHBlcnMuc2gKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gY2hhb3NfbW9ua2V5CiAgICAgICAgLSAkeyBidW5kbGUucGFyYW1ldGVycy5jaGFvc19tb25rZXkgfQogICAgICBvdXRwdXRzOgogICAgICAgIC0gbmFtZTogcmVzdWx0CiAgICAgICAgICByZWdleDogIiguKikiCgpkcnktcnVuOgogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJDaGVjayBzb21lIHRoaW5ncyIKICAgICAgY29tbWFuZDogZWNobwogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAiQWxsIGNsZWFyISIKCnN0YXR1czoKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAiUHJpbnQgY29uZmlnIgogICAgICBjb21tYW5kOiBjYXQKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gJHsgYnVuZGxlLnBhcmFtZXRlcnMuY2ZnIH0KICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAiUHJpbnQgbWFnaWMiCiAgICAgIGNvbW1hbmQ6IGNhdAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBtYWdpYy50eHQKCmJvb206CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIm1vZGlmeSB0aGUgYnVuZGxlIGluIHVua25vd2FibGUgd2F5cyIKICAgICAgY29tbWFuZDogZWNobwogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAiWU9MTyIKCnVwZ3JhZGU6CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIkVuc3VyZSBtYWdpYyIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIGVuc3VyZU1hZ2ljCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogInVwZ3JhZGUiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSB1cGdyYWRlCiAgICAgIG91dHB1dHM6CiAgICAgICAgLSBuYW1lOiBteWxvZ3MKICAgICAgICAgIHJlZ2V4OiAiKC4qKSIKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAicm9sbCB0aGUgZGljZSB3aXRoIHlvdXIgY2hhb3MgbW9ua2V5IgogICAgICBjb21tYW5kOiAuL2hlbHBlcnMuc2gKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gY2hhb3NfbW9ua2V5CiAgICAgICAgLSAkeyBidW5kbGUucGFyYW1ldGVycy5jaGFvc19tb25rZXkgfQogICAgICBvdXRwdXRzOgogICAgICAgIC0gbmFtZTogcmVzdWx0CiAgICAgICAgICByZWdleDogIiguKikiCgp1bmluc3RhbGw6CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIkVuc3VyZSBNYWdpYyIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIGVuc3VyZU1hZ2ljCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogInVuaW5zdGFsbCIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIHVuaW5zdGFsbAogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJyb2xsIHRoZSBkaWNlIHdpdGggeW91ciBjaGFvcyBtb25rZXkiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBjaGFvc19tb25rZXkKICAgICAgICAtICR7IGJ1bmRsZS5wYXJhbWV0ZXJzLmNoYW9zX21vbmtleSB9Cg==",
"manifest": "IyBUaGlzIGlzIGEgdGVzdCBidW5kbGUgdGhhdCBtYWtlcyBubyBsb2dpY2FsIHNlbnNlLCBidXQgaXQgZG9lcyBleGVyY2lzZSBsb3RzIG9mIGRpZmZlcmVudCBidW5kbGUgZmVhdHVyZXMKCnNjaGVtYVZlcnNpb246IDEuMC4wCm5hbWU6IG15YnVucwp2ZXJzaW9uOiAwLjEuMgpkZXNjcmlwdGlvbjogIkEgdmVyeSB0aG9yb3VnaCB0ZXN0IGJ1bmRsZSIKcmVnaXN0cnk6IGxvY2FsaG9zdDo1MDAwCmRvY2tlcmZpbGU6IERvY2tlcmZpbGUudG1wbAoKcmVxdWlyZWQ6CiAgLSBkb2NrZXIKCmNyZWRlbnRpYWxzOgogIC0gbmFtZTogdXNlcm5hbWUKICAgIGRlc2NyaXB0aW9uOiAiVGhlIG5hbWUgeW91IHdhbnQgb24gdGhlIGF1ZGl0IGxvZyIKICAgIGVudjogVVNFUk5BTUUKCnBhcmFtZXRlcnM6CiAgLSBuYW1lOiBsb2dfbGV2ZWwKICAgIGRlc2NyaXB0aW9uOiAiSG93IHVuaGVscGZ1bCB3b3VsZCB5b3UgbGlrZSB0aGUgbG9ncyB0byBiZT8iCiAgICB0eXBlOiBpbnRlZ2VyCiAgICBtaW5pbXVtOiAxCiAgICBtYXhpbXVtOiAxMQogICAgZGVmYXVsdDogNQogIC0gbmFtZTogcGFzc3dvcmQKICAgIGRlc2NyaXB0aW9uOiAiVGhlIHN1cGVyIHNlY3JldCBkYXRhIgogICAgdHlwZTogc3RyaW5nCiAgICBkZWZhdWx0OiAiZGVmYXV0bC1zZWNyZXQiCiAgICBzZW5zaXRpdmU6IHRydWUKICAtIG5hbWU6IGNoYW9zX21vbmtleQogICAgZGVzY3JpcHRpb246ICJTZXQgdG8gdHJ1ZSB0byBtYWtlIHRoZSBidW5kbGUgZmFpbCIKICAgIHR5cGU6IGJvb2xlYW4KICAgIGRlZmF1bHQ6IGZhbHNlCiAgLSBuYW1lOiBjZmcKICAgIGRlc2NyaXB0aW9uOiAiQSBqc29uIGNvbmZpZyBmaWxlIgogICAgdHlwZTogZmlsZQogICAgZGVmYXVsdDogJycKICAgIHBhdGg6IGJ1bmNmZy5qc29uCgpvdXRwdXRzOgogIC0gbmFtZTogbXlsb2dzCiAgICBhcHBseVRvOgogICAgICAtIGluc3RhbGwKICAgICAgLSB1cGdyYWRlCiAgLSBuYW1lOiByZXN1bHQKICAgIGFwcGx5VG86CiAgICAgIC0gaW5zdGFsbAogICAgICAtIHVwZ3JhZGUKICAgIHNlbnNpdGl2ZTogdHJ1ZQoKc3RhdGU6CiAgLSBuYW1lOiBtYWdpY19maWxlCiAgICBwYXRoOiBtYWdpYy50eHQKCmRlcGVuZGVuY2llczoKICByZXF1aXJlczoKICAgIC0gbmFtZTogZGIKICAgICAgYnVuZGxlOgogICAgICAgIHJlZmVyZW5jZTogImxvY2FsaG9zdDo1MDAwL215ZGI6djAuMS4wIgogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIGRhdGFiYXNlOiBiaWdkYgoKaW1hZ2VzOgogIHdoYWxlc2F5ZDoKICAgIGRlc2NyaXB0aW9uOiAiV2hhbGVzYXkgYXMgYSBzZXJ2aWNlIgogICAgaW1hZ2VUeXBlOiAiZG9ja2VyIgogICAgcmVwb3NpdG9yeTogY2Fyb2x5bnZzL3doYWxlc2F5ZAogICAgdGFnOiAibGF0ZXN0IgoKbWl4aW5zOgogIC0gZXhlYwogIC0gdGVzdG1peGluOgogICAgICBjbGllbnRWZXJzaW9uOiAxLjIuMwoKY3VzdG9tQWN0aW9uczoKICBkcnktcnVuOgogICAgZGVzY3JpcHRpb246ICJNYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGJlZm9yZSB5b3UgcnVuIGl0IgogICAgc3RhdGVsZXNzOiB0cnVlCiAgICBtb2RpZmllczogZmFsc2UKICBzdGF0dXM6CiAgICBkZXNjcmlwdGlvbjogIlByaW50IHRoZSBpbnN0YWxsYXRpb24gc3RhdHVzIgogICAgc3RhdGVsZXNzOiBmYWxzZQogICAgbW9kaWZpZXM6IGZhbHNlCgppbnN0YWxsOgogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJDaGVjayB0aGUgZG9ja2VyIHNvY2tldCIKICAgICAgY29tbWFuZDogc3RhdAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAvdmFyL3J1bi9kb2NrZXIuc29jawogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJMZXQncyBtYWtlIHNvbWUgbWFnaWMiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBtYWtlTWFnaWMKICAgICAgICAtICIkeyBidW5kbGUuY3JlZGVudGlhbHMudXNlcm5hbWUgfSBpcyBhIHVuaWNvcm4gd2l0aCAkeyBidW5kbGUucGFyYW1ldGVycy5wYXNzd29yZCB9IHNlY3JldC4iCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogImluc3RhbGwiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBpbnN0YWxsCiAgICAgIG91dHB1dHM6CiAgICAgICAgLSBuYW1lOiBteWxvZ3MKICAgICAgICAgIHJlZ2V4OiAiKC4qKSIKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAicm9sbCB0aGUgZGljZSB3aXRoIHlvdXIgY2hhb3MgbW9ua2V5IgogICAgICBjb21tYW5kOiAuL2hlbHBlcnMuc2gKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gY2hhb3NfbW9ua2V5CiAgICAgICAgLSAkeyBidW5kbGUucGFyYW1ldGVycy5jaGFvc19tb25rZXkgfQogICAgICBvdXRwdXRzOgogICAgICAgIC0gbmFtZTogcmVzdWx0CiAgICAgICAgICByZWdleDogIiguKikiCgpkcnktcnVuOgogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJDaGVjayBzb21lIHRoaW5ncyIKICAgICAgY29tbWFuZDogZWNobwogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAiQWxsIGNsZWFyISIKCnN0YXR1czoKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAiUHJpbnQgY29uZmlnIgogICAgICBjb21tYW5kOiBjYXQKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gJHsgYnVuZGxlLnBhcmFtZXRlcnMuY2ZnIH0KICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAiUHJpbnQgbWFnaWMiCiAgICAgIGNvbW1hbmQ6IGNhdAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBtYWdpYy50eHQKCmJvb206CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIm1vZGlmeSB0aGUgYnVuZGxlIGluIHVua25vd2FibGUgd2F5cyIKICAgICAgY29tbWFuZDogZWNobwogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSAiWU9MTyIKCnVwZ3JhZGU6CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIkVuc3VyZSBtYWdpYyIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIGVuc3VyZU1hZ2ljCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogInVwZ3JhZGUiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSB1cGdyYWRlCiAgICAgIG91dHB1dHM6CiAgICAgICAgLSBuYW1lOiBteWxvZ3MKICAgICAgICAgIHJlZ2V4OiAiKC4qKSIKICAtIGV4ZWM6CiAgICAgIGRlc2NyaXB0aW9uOiAicm9sbCB0aGUgZGljZSB3aXRoIHlvdXIgY2hhb3MgbW9ua2V5IgogICAgICBjb21tYW5kOiAuL2hlbHBlcnMuc2gKICAgICAgYXJndW1lbnRzOgogICAgICAgIC0gY2hhb3NfbW9ua2V5CiAgICAgICAgLSAkeyBidW5kbGUucGFyYW1ldGVycy5jaGFvc19tb25rZXkgfQogICAgICBvdXRwdXRzOgogICAgICAgIC0gbmFtZTogcmVzdWx0CiAgICAgICAgICByZWdleDogIiguKikiCgp1bmluc3RhbGw6CiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogIkVuc3VyZSBNYWdpYyIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIGVuc3VyZU1hZ2ljCiAgLSBleGVjOgogICAgICBkZXNjcmlwdGlvbjogInVuaW5zdGFsbCIKICAgICAgY29tbWFuZDogLi9oZWxwZXJzLnNoCiAgICAgIGFyZ3VtZW50czoKICAgICAgICAtIHVuaW5zdGFsbAogIC0gZXhlYzoKICAgICAgZGVzY3JpcHRpb246ICJyb2xsIHRoZSBkaWNlIHdpdGggeW91ciBjaGFvcyBtb25rZXkiCiAgICAgIGNvbW1hbmQ6IC4vaGVscGVycy5zaAogICAgICBhcmd1bWVudHM6CiAgICAgICAgLSBjaGFvc19tb25rZXkKICAgICAgICAtICR7IGJ1bmRsZS5wYXJhbWV0ZXJzLmNoYW9zX21vbmtleSB9Cg==",
"version": "",
"commit": ""
},
Expand Down
4 changes: 2 additions & 2 deletions pkg/config/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ func (c *TestConfig) SetupUnitTest() {
mixinsDir := filepath.Join(home, "mixins")
c.FileSystem.Create(filepath.Join(mixinsDir, "exec/exec"))
c.FileSystem.Create(filepath.Join(mixinsDir, "exec/runtimes/exec-runtime"))
c.FileSystem.Create(filepath.Join(mixinsDir, "helm/helm"))
c.FileSystem.Create(filepath.Join(mixinsDir, "helm/runtimes/helm-runtime"))
c.FileSystem.Create(filepath.Join(mixinsDir, "testmixin/testmixin"))
c.FileSystem.Create(filepath.Join(mixinsDir, "testmixin/runtimes/testmixin-runtime"))
}

// SetupIntegrationTest initializes the filesystem with the supporting files in
Expand Down
19 changes: 18 additions & 1 deletion pkg/mixin/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ func NewTestMixinProvider() *TestMixinProvider {
Author: "Porter Authors",
},
},
&Metadata{
Name: "testmixin",
VersionInfo: pkgmgmt.VersionInfo{
Version: "v0.1.0",
Commit: "abc123",
Author: "Porter Authors",
},
},
}

provider := TestMixinProvider{
Expand Down Expand Up @@ -66,6 +74,15 @@ func (p *TestMixinProvider) PrintExecOutput(pkgContext *portercontext.Context, n
}

func (p *TestMixinProvider) GetSchema(ctx context.Context, name string) (string, error) {
b, err := ioutil.ReadFile("../exec/schema/exec.json")
var schemaFile string
switch name {
case "exec":
schemaFile = "../exec/schema/exec.json"
case "testmixin":
schemaFile = "../../cmd/testmixin/schema.json"
default:
return "", nil
}
b, err := ioutil.ReadFile(schemaFile)
return string(b), err
}
2 changes: 1 addition & 1 deletion pkg/pkgmgmt/client/filesystem_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ func TestFileSystem_List(t *testing.T) {
require.Nil(t, err)
require.Len(t, mixins, 2)
assert.Equal(t, mixins[0], "exec")
assert.Equal(t, mixins[1], "helm")
assert.Equal(t, mixins[1], "testmixin")
}
1 change: 0 additions & 1 deletion pkg/porter/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,6 @@ func (p *Porter) buildBundle(ctx context.Context, m *manifest.Manifest, digest d
imageDigests := map[string]string{m.Image: digest.String()}

mixins, err := p.getUsedMixins(ctx, m)

if err != nil {
return err
}
Expand Down
9 changes: 5 additions & 4 deletions pkg/porter/mixins/list-output.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
---------------------------------
Name Version Author
---------------------------------
exec v1.0 Porter Authors
--------------------------------------
Name Version Author
--------------------------------------
exec v1.0 Porter Authors
testmixin v0.1.0 Porter Authors
Loading

0 comments on commit 1b74eb6

Please sign in to comment.