This repository has been archived by the owner on Jan 29, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replace publishing rules with ghrelease rules (#1)
* Impl proper version incrementing * Impl changelog generator * Impl docs publisher * Impl check_local_tracks_authoritative_branch * Remove k8s repo * Migrate to new publisher * Update example docs
- Loading branch information
Showing
37 changed files
with
1,130 additions
and
1,719 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,12 +11,6 @@ git_repository( | |
remote = "[email protected]:bazelbuild/rules_docker.git", | ||
) | ||
|
||
git_repository( | ||
name = "io_bazel_rules_k8s", | ||
commit = "d6e1b65317246fe044482f9e042556c77e6893b8", | ||
remote = "[email protected]:bazelbuild/rules_k8s.git", | ||
) | ||
|
||
load("@io_bazel_rules_docker//container:container.bzl", "repositories") | ||
|
||
repositories() | ||
|
@@ -28,10 +22,6 @@ load( | |
|
||
_py_image_repos() | ||
|
||
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults", "k8s_repositories") | ||
|
||
k8s_repositories() | ||
|
||
load("//terraform:dependencies.bzl", "terraform_repositories") | ||
|
||
terraform_repositories() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -93,30 +93,46 @@ build:publish --define IMAGE_CHROOT=index.docker.io/netchris | |
|
||
### [`release/BUILD`](release/BUILD) | ||
```python | ||
load("//terraform:def.bzl", "terraform_module_publisher") | ||
load("//terraform/experimental/ghrelease:def.bzl", "ghrelease", "ghrelease_assets", "ghrelease_test_suite") | ||
|
||
VERSION = "0.2" | ||
|
||
# To make our terraform module available to others we configure a | ||
# 'terraform_module_publisher' which will | ||
# - Run configured tests | ||
# - Publish relevant docker images | ||
# - Output each module into its own subdirectory in this repo (note | ||
# that we can optionally output to a different repo) | ||
terraform_module_publisher( | ||
name = "publish", | ||
bazelrc_config = "publish", | ||
prepublish_tests = [ | ||
# bazel excludes all tests tagged as 'manual' from wildcard | ||
# patterns, so we explicitly include our e2e test. | ||
"//...", # <- means 'all tests' (which aren't tagged 'manual') | ||
"//examples/test:e2e_integration_test", | ||
# 'ghrelease' which will: | ||
# - Run "preflight-checks" (dependant test suites, etc) | ||
# - Push associated docker images | ||
# - Generate release notes, including a changelog from the previous | ||
# version | ||
# - Increment the current tag/version's patch version (or prerelease | ||
# version if the `--prerelease` flag is used) | ||
# - Create a new GitHub Release with release notes and any extra docs | ||
# - Attach any assets to the new Release | ||
ghrelease( | ||
name = "release", | ||
version = VERSION, | ||
deps = [ | ||
":prerelease-tests", | ||
":tf-modules", | ||
], | ||
) | ||
|
||
ghrelease_assets( | ||
name = "tf-modules", | ||
bazel_flags = ["--config=publish"], | ||
data = [ | ||
"//examples/src:hello-world_ecs", | ||
"//examples/src:hello-world_k8s", | ||
], | ||
published_modules = { | ||
"mymodule": "//examples/src:hello-world_k8s", | ||
"mymodule-ecs": "//examples/src:hello-world_ecs", | ||
}, | ||
# remote = "[email protected]:my-org-terraform-modules/terraform-myproject-modules.git", | ||
# remote_path = "modules", | ||
) | ||
|
||
ghrelease_test_suite( | ||
name = "prerelease-tests", | ||
tests = [ | ||
"//examples/...", | ||
"//examples/test:k8s-e2e_integration_test", | ||
], | ||
) | ||
|
||
``` | ||
|
||
Check out the [release directory](release/mymodule) to see the published module! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,31 @@ | ||
load("//terraform:def.bzl", "terraform_module_publisher") | ||
load("//terraform/experimental/ghrelease:def.bzl", "ghrelease", "ghrelease_assets", "ghrelease_test_suite") | ||
|
||
terraform_module_publisher( | ||
name = "publish", | ||
bazelrc_config = "publish", | ||
prepublish_tests = [ | ||
VERSION = "0.2" | ||
|
||
ghrelease( | ||
name = "release", | ||
args = ["--draft"], | ||
version = VERSION, | ||
deps = [ | ||
":prerelease-tests", | ||
":tf-modules", | ||
], | ||
) | ||
|
||
ghrelease_assets( | ||
name = "tf-modules", | ||
bazel_flags = ["--config=publish"], | ||
data = [ | ||
"//examples/src:hello-world_ecs", | ||
"//examples/src:hello-world_k8s", | ||
], | ||
) | ||
|
||
ghrelease_test_suite( | ||
name = "prerelease-tests", | ||
tests = [ | ||
"//...", | ||
"//examples/test:k8s-e2e_integration_test", | ||
#"//examples/test:ecs-e2e_integration_test", | ||
# "//examples/test:ecs-e2e_integration_test" | ||
], | ||
published_modules = { | ||
"mymodule": "//examples/src:hello-world_k8s", | ||
"mymodule-ecs": "//examples/src:hello-world_ecs", | ||
}, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,94 +1,4 @@ | ||
load( | ||
"//terraform/internal:terraform.bzl", | ||
"terraform_plugin", | ||
_terraform_module = "terraform_module", | ||
_terraform_workspace = "terraform_workspace", | ||
) | ||
load("//terraform/internal:test.bzl", "terraform_integration_test") | ||
load( | ||
"//terraform/internal:distribution.bzl", | ||
"terraform_distribution_publisher", | ||
"terraform_module_publisher", | ||
_terraform_distribution_dir = "terraform_distribution_dir", | ||
) | ||
load("//terraform:providers.bzl", "tf_workspace_files_prefix") | ||
|
||
def terraform_distribution_dir(name, deps, **kwargs): | ||
srcs_name = "%s.srcs-list" % name | ||
module_name = "%s.module" % name | ||
|
||
# change "relative" deps to absolute deps | ||
deps_abs = [ | ||
"//" + native.package_name() + dep if dep.startswith(":") else dep | ||
for dep in deps | ||
] | ||
native.genquery( | ||
name = srcs_name, | ||
opts = ["--noimplicit_deps"], | ||
expression = """kind("source file", deps(set(%s)))""" % " ".join(deps_abs), | ||
scope = deps_abs, | ||
) | ||
|
||
terraform_module( | ||
name = module_name, | ||
deps = deps_abs, | ||
) | ||
|
||
_terraform_distribution_dir( | ||
name = name, | ||
srcs_list = ":" + srcs_name, | ||
module = ":" + module_name, | ||
**kwargs | ||
) | ||
|
||
def _flip_modules_attr(modules): | ||
""" | ||
Translate modules attr from a 'name=>label' dict to 'label=>name' | ||
""" | ||
flipped = {} | ||
for name, label in modules.items(): | ||
if not (label.startswith("@") or label.startswith("//") or label.startswith(":")): | ||
fail("Modules are now specified as 'name=>label'", attr="modules") | ||
# append package path & workspace name as necessary | ||
abs_label = "//" + native.package_name() + label if label.startswith(":") else label | ||
abs_label = native.repository_name() + abs_label if abs_label.startswith("//") else abs_label | ||
if abs_label in flipped: | ||
fail("Modules may only be specified once (%s)" % label, attr = "modules") | ||
flipped[abs_label] = name | ||
return flipped | ||
|
||
def terraform_module(name, modules = {}, **kwargs): | ||
_terraform_module( | ||
name = name, | ||
modules = _flip_modules_attr(modules), | ||
**kwargs | ||
) | ||
|
||
def terraform_workspace(name, modules = {}, **kwargs): | ||
_terraform_workspace( | ||
name = name, | ||
modules = _flip_modules_attr(modules), | ||
**kwargs | ||
) | ||
|
||
# create a convenient destroy target which | ||
# CDs to the package dir and runs terraform destroy | ||
native.genrule( | ||
name = "%s.destroy" % name, | ||
outs = ["%s.destroy.sh" % name], | ||
cmd = """echo ' | ||
#!/bin/sh | ||
set -eu | ||
tf_workspace_dir="$$BUILD_WORKSPACE_DIRECTORY/{package}/{tf_workspace_files_prefix}" | ||
if [ -e "$$tf_workspace_dir" ]; then | ||
cd "$$tf_workspace_dir" | ||
exec terraform destroy "$$@" .terraform/tfroot | ||
else | ||
>&2 echo "Could not find terraform workspace dir, so there is nothing to destroy ($$tf_workspace_dir)" | ||
fi | ||
' > $@""".format( | ||
package = native.package_name(), | ||
tf_workspace_files_prefix = tf_workspace_files_prefix(name), | ||
), | ||
executable = True, | ||
) | ||
load("//terraform/internal:terraform.bzl", "terraform_plugin") | ||
load("//terraform/internal:workspace.bzl", "terraform_workspace") | ||
load("//terraform/internal:module.bzl", "terraform_module") | ||
load("//terraform/internal:integration_test.bzl", "terraform_integration_test") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
load("//terraform/experimental/ghrelease/internal:publisher.bzl", "ghrelease") | ||
load("//terraform/experimental/ghrelease/internal:assets.bzl", "ghrelease_assets") | ||
load("//terraform/experimental/ghrelease/internal:test_suite.bzl", "ghrelease_test_suite") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
[py_binary( | ||
name = f[:-len(".py")], | ||
srcs = [f], | ||
visibility = ["//visibility:public"], | ||
deps = [":lib"], | ||
) for f in glob(["*_runner.py"])] | ||
|
||
py_library( | ||
name = "lib", | ||
srcs = ["lib.py"], | ||
imports = [ | ||
"rules_terraform/terraform/experimental/ghrelease/internal", | ||
], | ||
deps = [ | ||
"@py_semver", | ||
], | ||
) | ||
|
||
py_test( | ||
name = "test", | ||
size = "small", | ||
srcs = ["test.py"], | ||
deps = [":lib"], | ||
) |
Oops, something went wrong.