Skip to content

Commit

Permalink
Upgrade deps and cross-compile (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
VJftw authored Feb 2, 2024
1 parent c3e5af3 commit cf8e09c
Show file tree
Hide file tree
Showing 14 changed files with 1,246 additions and 181 deletions.
14 changes: 10 additions & 4 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
version:
description: 'Release Version'
description: "Release Version"
required: true

jobs:
Expand All @@ -26,11 +26,17 @@ jobs:
- name: Build
run: |-
./pleasew build -p -v=2 \
--arch linux_amd64 \
//cmd/please_terraform:please_terraform
--profile release \
//dist:release_files
- name: Release
uses: softprops/action-gh-release@v1
with:
files: plz-out/bin/cmd/please_terraform/please_terraform
files: |
plz-out/gen/dist/please_terraform_darwin_amd64
plz-out/gen/dist/please_terraform_darwin_arm64
plz-out/gen/dist/please_terraform_freebsd_amd64
plz-out/gen/dist/please_terraform_linux_amd64
plz-out/gen/dist/please_terraform_linux_arm64
plz-out/gen/dist/please_terraform_windows_amd64.exe
tag_name: ${{ github.event.inputs.version }}
6 changes: 6 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,9 @@ jobs:

- name: Run Terraform Apply
run: ./pleasew query alltargets --include terraform_apply //example/... | ./pleasew run sequential -a=--auto-approve -

- name: Build
run: |-
./pleasew build -p -v=2 \
--profile release \
//dist:release_files
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Entries below this point are managed by Please (DO NOT EDIT)
plz-out
.plzconfig.local
.plz_clean*
2 changes: 1 addition & 1 deletion .plzconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
; Or you can uncomment the following to pin everyone to a particular version;
; when you change it all users will automatically get updated.
[please]
version = 17.0.0
version = 17.7.0
; Support the non *-rules repo name format of Please plugins.
PluginRepo = "https://github.com/{owner}/{plugin}/archive/{revision}.zip"

Expand Down
5 changes: 5 additions & 0 deletions .plzconfig.release
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[Plugin "go"]
GoTool = //dist:release_toolchain|go

[buildconfig]
release = true
5 changes: 5 additions & 0 deletions BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
filegroup(
name = "mod",
srcs = ["go.mod"],
visibility = ["PUBLIC"],
)
97 changes: 47 additions & 50 deletions build/defs/terraform.build_defs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"""
subinclude("///shell//build_defs:shell")

def terraform_toolchain(name:str, version:str, hashes:list = [], labels: list = [], visibility:list = []):
def terraform_toolchain(name:str, version:str, hashes:list=[], labels:list=[], visibility:list=[]):
"""Build rule for obtaining a version of the Terraform CLI.
Args:
name: The name of the build rule.
Expand All @@ -12,31 +12,30 @@ def terraform_toolchain(name:str, version:str, hashes:list = [], labels: list =
visibility: The targets to make the toolchain visible to.
"""
_validate_config()
download=remote_file(
download = remote_file(
name = f"_{name}_download",
out = f"_{name}_download",
url = f"https://releases.hashicorp.com/terraform/{version}/terraform_{version}_{CONFIG.OS}_{CONFIG.ARCH}.zip",
hashes = hashes,
extract = True,
)
return genrule(
name=name,
srcs=[download],
name = name,
srcs = [download],
# We output into a directory so we can add `terraform` to the PATH at runtime.
outs=[f"_{name}_download/terraform"],
cmd="mkdir -p $(dirname $OUTS) && mv $SRCS/terraform $OUTS",
outs = [f"_{name}_download/terraform"],
cmd = "mkdir -p $(dirname $OUTS) && mv $SRCS/terraform $OUTS",
visibility = visibility,
binary = True,
)

def terraform_module(
name: str,
srcs: list = None,
aliases: list = [],
deps: list = [],
labels: list = [],
visibility: list = [],
):
name:str,
srcs:list=None,
aliases:list=[],
deps:list=[],
labels:list=[],
visibility:list=[]):
"""Build rule for obtaining a remote Terraform Module or defining a local Terraform module.
Args:
name: The name of the build rule.
Expand All @@ -47,7 +46,7 @@ def terraform_module(
visibility: The targets to make the toolchain visible to.
"""
_validate_config()
deps=[canonicalise(dep) for dep in deps]
deps = [canonicalise(dep) for dep in deps]
deps_flags = [f"--deps=\"$(location {d})\"" for d in deps]
deps_cmd = " ".join(deps_flags)

Expand Down Expand Up @@ -76,18 +75,17 @@ $TOOLS -vvvvv module local \\
)

def terraform_registry_module(
name: str,
registry: str = "https://registry.terraform.io",
module: str,
version: str,
aliases: list = [],
strip: list = [],
deps: list = [],
hashes: list = [],
licences: list = [],
labels: list = [],
visibility: list = [],
):
name:str,
registry:str="https://registry.terraform.io",
module:str,
version:str,
aliases:list=[],
strip:list=[],
deps:list=[],
hashes:list=[],
licences:list=[],
labels:list=[],
visibility:list=[]):
"""Build rule for obtaining a remote Terraform Module or defining a local Terraform module.
Args:
name: The name of the build rule.
Expand All @@ -104,11 +102,11 @@ def terraform_registry_module(
visibility: The targets to make the toolchain visible to.
"""
_validate_config()
mod_namespace=module.split("/")[0]
mod_name=module.split("/")[1]
mod_provider=module.split("/")[2]
mod_namespace = module.split("/")[0]
mod_name = module.split("/")[1]
mod_provider = module.split("/")[2]

deps=[canonicalise(dep) for dep in deps]
deps = [canonicalise(dep) for dep in deps]
deps_flags = [f"--deps=\"$(location {d})\"" for d in deps]
deps_cmd = " ".join(deps_flags)

Expand All @@ -121,10 +119,10 @@ def terraform_registry_module(
return genrule(
name = name,
outs = [name],
exported_deps=deps,
deps=deps,
visibility=visibility,
tools=[CONFIG.TERRAFORM.TOOL],
exported_deps = deps,
deps = deps,
visibility = visibility,
tools = [CONFIG.TERRAFORM.TOOL],
cmd = f"""
set -x
$TOOLS -vvvvv module registry \\
Expand All @@ -143,19 +141,18 @@ $TOOLS -vvvvv module registry \\
)

def terraform_root(
name: str,
srcs: list,
vars: dict = {},
var_files: list = [],
modules: list = [],
toolchain: str = None,
labels: list = [],
visibility: list = [],
add_default_workflows: bool = True,
additional_workspace_data: list = [],
pre_workspace_cmd: str = "",
post_workspace_cmd: str = "",
):
name:str,
srcs:list,
vars:dict={},
var_files:list=[],
modules:list=[],
toolchain:str=None,
labels:list=[],
visibility:list=[],
add_default_workflows:bool=True,
additional_workspace_data:list=[],
pre_workspace_cmd:str="",
post_workspace_cmd:str=""):
"""Build rule for running Terraform against Terraform configuration.
Args:
name: The name of the build rule.
Expand All @@ -175,7 +172,7 @@ def terraform_root(

if vars:
json_vars = json(vars)
vars_file=genrule(
vars_file = genrule(
name = f"{name}_vars",
outs = [f"{name}_vars.tfvars.json"],
cmd = f"echo '{json_vars}' > $OUTS",
Expand All @@ -192,7 +189,7 @@ def terraform_root(
srcs += [CONFIG.TERRAFORM.EXTRA_TERRAFORM_ROOT_SRC]

# build a Terraform root workspace
root=genrule(
root = genrule(
name = f"_{name}_root",
outs = [f"{name}_root"],
tools = [CONFIG.TERRAFORM.TOOL],
Expand Down Expand Up @@ -283,7 +280,7 @@ def _terraform_tool():
if CONFIG.TERRAFORM.TOOL_VERSION:
remote_file(
name = "please_terraform",
url = f"https://github.com/VJftw/please-terraform/releases/download/{CONFIG.TERRAFORM.TOOL_VERSION}/please_terraform",
url = f"https://github.com/VJftw/please-terraform/releases/download/{CONFIG.TERRAFORM.TOOL_VERSION}/please_terraform_{CONFIG.OS}_{CONFIG.ARCH}",
visibility = ["PUBLIC"],
binary = True,
)
1 change: 0 additions & 1 deletion cmd/please_terraform/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ subinclude("///go//build_defs:go")
go_binary(
name = "please_terraform",
srcs = ["main.go"],
static = True,
visibility = ["PUBLIC"],
deps = [
"//internal/cmd",
Expand Down
37 changes: 37 additions & 0 deletions dist/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
subinclude("///go//build_defs:go")

if "RELEASE" in CONFIG and CONFIG.RELEASE:
architectures = [
"darwin_amd64",
"darwin_arm64",
"freebsd_amd64",
"linux_amd64",
"linux_arm64",
"windows_amd64",
]

go_toolchain(
name = "release_toolchain",
architectures = architectures,
version = "1.21.6",
)

def cross_compile(arch):
suffix = arch
if "windows" in arch:
suffix += ".exe"

return build_rule(
name = f"please_terraform_{arch}",
srcs = [f"///{arch}//cmd/please_terraform"],
outs = [f"please_terraform_{suffix}"],
cmd = "mv $SRC $OUT",
)

filegroup(
name = f"release_files",
srcs = [cross_compile(arch) for arch in architectures],
labels = [
f"hlink:plz-out/package",
],
)
69 changes: 46 additions & 23 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,63 @@ module github.com/VJftw/please-terraform
go 1.20

require (
github.com/hashicorp/go-getter v1.6.1
github.com/hashicorp/go-getter v1.7.3
github.com/jessevdk/go-flags v1.5.0
github.com/rs/zerolog v1.23.0
github.com/rs/zerolog v1.31.0
)

require (
cloud.google.com/go/compute v1.23.4 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v1.1.6 // indirect
cloud.google.com/go/storage v1.37.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect
go.opentelemetry.io/otel v1.22.0 // indirect
go.opentelemetry.io/otel/metric v1.22.0 // indirect
go.opentelemetry.io/otel/trace v1.22.0 // indirect
golang.org/x/crypto v0.18.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect
google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

require (
cloud.google.com/go v0.45.1 // indirect
github.com/aws/aws-sdk-go v1.15.78 // indirect
cloud.google.com/go v0.112.0 // indirect
github.com/aws/aws-sdk-go v1.50.9 // indirect
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
github.com/golang/protobuf v1.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.0.5 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
github.com/hashicorp/go-version v1.1.0 // indirect
github.com/hashicorp/golang-lru v0.5.1 // indirect
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect
github.com/klauspost/compress v1.11.2 // indirect
github.com/mitchellh/go-homedir v1.0.0 // indirect
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
github.com/stretchr/testify v1.8.0
github.com/ulikunitz/xz v0.5.8 // indirect
go.opencensus.io v0.22.0 // indirect
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // indirect
golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e // indirect
golang.org/x/text v0.3.3 // indirect
google.golang.org/api v0.9.0 // indirect
google.golang.org/appengine v1.6.1 // indirect
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 // indirect
google.golang.org/grpc v1.21.1 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/klauspost/compress v1.17.5 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/stretchr/testify v1.8.4
github.com/ulikunitz/xz v0.5.11 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/net v0.20.0 // indirect
golang.org/x/oauth2 v0.16.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/api v0.161.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20240125205218-1f4bbc51befe // indirect
google.golang.org/grpc v1.61.0 // indirect
)
Loading

0 comments on commit cf8e09c

Please sign in to comment.