diff --git a/MODULE.bazel b/MODULE.bazel index 47ac0a9..f92f56c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -16,6 +16,47 @@ bazel_dep(name = "rules_python", version = "0.21.0") bazel_dep(name = "rules_pkg", version = "0.9.1") bazel_dep(name = "rules_oci", version = "1.0.0") bazel_dep(name = "platforms", version = "0.0.6") +# See: https://github.com/bazelbuild/rules_go/blob/master/docs/go/core/bzlmod.md +# bazel_dep(name = "rules_go", version = "0.39.1", repo_name = "io_bazel_rules_go") +bazel_dep(name = "rules_go", version = "0.39.1") +# bazel_dep(name = "gazelle", version = "0.31.0", repo_name = "bazel_gazelle") +bazel_dep(name = "gazelle", version = "0.31.0") + +oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") + +oci.toolchains(crane_version = "v0.14.0") +use_repo(oci, "oci_crane_toolchains", "oci_crane_registry_toolchains", "oci_auth_config") + +register_toolchains("@oci_crane_toolchains//:all", "@oci_crane_registry_toolchains//:all") + +################################################################################ +# rules_go +################################################################################ + +# go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps") +go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps") + +go_deps.module( + path = "github.com/google/go-cmp", + sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", + version = "v0.5.9", +) + +use_repo(go_deps, "com_github_google_go_cmp") + +# oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") + +oci.pull( + name = "distroless_base", + digest = "sha256:ccaef5ee2f1850270d453fdf700a5392534f8d1a8ca2acda391fbb6a06b81c86", + image = "gcr.io/distroless/base", + platforms = [ + "linux/amd64", + "linux/arm64", + ], +) + +use_repo(oci, "distroless_base") ################################################################################ # rules_python @@ -33,7 +74,7 @@ bazel_dep(name = "platforms", version = "0.0.6") # "@python3_11_toolchains//:all", # ) -oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") +# oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") # See: # - https://hub.docker.com/layers/library/python/3.10-bullseye/images/sha256-b48e216f7c4adcf24fecd7016f3b8ead76866a19571819f67f47c1ccaf899717?context=explore @@ -53,26 +94,26 @@ use_repo(oci, "distroless_python") # rules_js ################################################################################ -npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True) +# npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True) -npm.npm_translate_lock( - name = "npm", - pnpm_lock = "//:pnpm-lock.yaml", - npmrc = "//:.npmrc", -) +# npm.npm_translate_lock( +# name = "npm", +# pnpm_lock = "//:pnpm-lock.yaml", +# npmrc = "//:.npmrc", +# ) -use_repo(npm, "npm") +# use_repo(npm, "npm") ################################################################################ # rules_ts ################################################################################ -rules_ts_ext = use_extension( - "@aspect_rules_ts//ts:extensions.bzl", - "ext", - dev_dependency = True, -) +# rules_ts_ext = use_extension( +# "@aspect_rules_ts//ts:extensions.bzl", +# "ext", +# dev_dependency = True, +# ) -rules_ts_ext.deps() +# rules_ts_ext.deps() -use_repo(rules_ts_ext, "npm_typescript") +# use_repo(rules_ts_ext, "npm_typescript") diff --git a/Makefile b/Makefile index 8ff689a..f545f82 100644 --- a/Makefile +++ b/Makefile @@ -72,6 +72,20 @@ run_oci_py_helloworld_v2: docker load --input `bazel cquery --output=files //projects/py_helloworld_v2_cli_app:tarball` docker run --rm local/py_helloworld_v2_cli_app:latest +run_go_devops_cli_app: + skaffold dev -m go-devops-cli-app-config + +run_py_devops_fastapi_app: + skaffold build -m py-devops-fastapi-app-config + + + +dev_go_devops_cli_app: + skaffold dev -m go-devops-cli-app-config + +dev_py_devops_fastapi_app: + skaffold dev -m py-devops-fastapi-app-config + git_new: diff --git a/README.md b/README.md index f0cff0e..019ccde 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ Unlike other examples and demos out in the wild, we have a loftier goals. If you don't see the following objectives being met, I wouldn't bother digging much further since technologies and versions change so much that anything here would almost be useless similar to what my experience was while looking for best practices and more indepth examples that can be used as blueprints rather than a one time presentation. +## Quickstart + +1. Download bazelisk +1. Download skaffold + ## Motivation [Salesforce](https://www.youtube.com/watch?v=KZIYdxsRp4w) diff --git a/WORKSPACE b/WORKSPACE new file mode 120000 index 0000000..7c31a52 --- /dev/null +++ b/WORKSPACE @@ -0,0 +1 @@ +WORKSPACE.bazel \ No newline at end of file diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 1f8ab4c..bde63fd 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -1,5 +1,6 @@ # Declares that this directory is the root of a Bazel workspace. -# See https://docs.bazel.build/versions/main/build-ref.html#workspace +# See: https://docs.bazel.build/versions/main/build-ref.html#workspace +# ISSUE: This needs to be symlinked to WORKSPACE for Skaffold workspace( # How this workspace would be referenced with absolute labels from another workspace name = "monorepo", @@ -65,3 +66,48 @@ multi_pip_parse( load("@pip_deps//:requirements.bzl", "install_deps") install_deps() + + + +# +# rules_docker +# + +# http_archive( +# name = "io_bazel_rules_docker", +# sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf", +# urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"], +# ) + +# +# Golang (rules_docker - go_image) +# + +# load("@rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +# go_rules_dependencies() + +# go_register_toolchains( +# go_version = "1.20.2", +# ) + +# load( +# "@io_bazel_rules_docker//repositories:repositories.bzl", +# container_repositories = "repositories", +# ) + +# container_repositories() + +# load( +# "@io_bazel_rules_docker//repositories:deps.bzl", +# container_deps = "deps", +# ) + +# container_deps() + +# load( +# "@io_bazel_rules_docker//go:image.bzl", +# _go_image_repos = "repositories", +# ) + +# _go_image_repos() diff --git a/k8s/README.md b/k8s/README.md new file mode 100644 index 0000000..cc664a2 --- /dev/null +++ b/k8s/README.md @@ -0,0 +1,5 @@ +DO NOT USE THIS CONVENTION + +Use kubernetes manifests per application instead! + +This is only a placeholder to warn anyone attempting to use the approach. \ No newline at end of file diff --git a/libs/devops/models/devops.py b/libs/devops/models/devops.py index 8dfd74e..5e19816 100644 --- a/libs/devops/models/devops.py +++ b/libs/devops/models/devops.py @@ -1,6 +1,8 @@ # See: # - https://www.w3schools.com/python/python_inheritance.asp # - https://github.com/faif/python-patterns/blob/master/patterns/creational/abstract_factory.py +# Example: +# - https://github.com/Netflix/dispatch/blob/master/tests/factories.py import random from typing import Type diff --git a/projects/go_devops_cli_app/BUILD.bazel b/projects/go_devops_cli_app/BUILD.bazel new file mode 120000 index 0000000..70e665e --- /dev/null +++ b/projects/go_devops_cli_app/BUILD.bazel @@ -0,0 +1 @@ +BUILD.bazel-oci_image \ No newline at end of file diff --git a/projects/go_devops_cli_app/BUILD.bazel-go_image b/projects/go_devops_cli_app/BUILD.bazel-go_image new file mode 100644 index 0000000..eae6ac4 --- /dev/null +++ b/projects/go_devops_cli_app/BUILD.bazel-go_image @@ -0,0 +1,22 @@ +# See: https://bazel.build/concepts/build-files +# TODO: +# - Migrate to rules_oci (https://github.com/bazel-contrib/rules_oci/blob/main/docs/go.md) +# - https://github.com/aspect-build/bazel-examples/tree/main/oci_go_image + +# +# Golang (rules_docker - go_image) +# + +load("@io_bazel_rules_docker//go:image.bzl", "go_image") + +go_image( + name = "go_devops_cli_app_image", + srcs = [ + "src/main.go", + "src/go.mod", + "src/go.sum", + ], + goos = "linux", + goarch = "amd64", + static = "on", +) diff --git a/projects/go_devops_cli_app/BUILD.bazel-oci_image b/projects/go_devops_cli_app/BUILD.bazel-oci_image new file mode 100644 index 0000000..cb4657f --- /dev/null +++ b/projects/go_devops_cli_app/BUILD.bazel-oci_image @@ -0,0 +1,86 @@ +# See: https://bazel.build/concepts/build-files +# TODO: +# - Migrate to rules_oci (https://github.com/bazel-contrib/rules_oci/blob/main/docs/go.md) +# - https://github.com/aspect-build/bazel-examples/tree/main/oci_go_image + +# +# Golang (rules_oci - oci_go_image) +# + +load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") +load("@rules_go//go:def.bzl", "go_binary", "go_library") +load("@rules_oci//oci:defs.bzl", "oci_image", "oci_tarball") +load("@rules_pkg//:pkg.bzl", "pkg_tar") +load("@container_structure_test//:defs.bzl", "container_structure_test") + +go_library( + name = "app_lib", + srcs = ["src/main.go"], + importpath = "example.com/custom_registry/app", + visibility = ["//visibility:private"], + deps = ["@com_github_google_go_cmp//cmp"], +) + +go_binary( + name = "app", + embed = [":app_lib"], + visibility = ["//visibility:public"], +) + +# Put app go_binary into a tar layer. +pkg_tar( + name = "app_layer", + srcs = [":app"], + # If the binary depends on RUNFILES, uncomment the attribute below. + # include_runfiles = True +) + +oci_image( + name = "image", + base = "@distroless_base", + entrypoint = ["/app"], + tars = [":app_layer"], +) + +# This is the target that should be released to the target platform +platform_transition_filegroup( + name = "transitioned_image", + srcs = [":image"], + target_platform = select({ + "@platforms//cpu:arm64": "@rules_go//go/toolchain:linux_arm64", + "@platforms//cpu:x86_64": "@rules_go//go/toolchain:linux_amd64", + }), +) + +# $ bazel build projects/go_devops_cli_app:tarball +# $ docker load --input $(bazel cquery --output=files projects/go_devops_cli_app:tarball) +# $ docker run --rm flyr.io/go-devops-cli-app:latest +# string( +# - "Hello World", +# + "Hello Go", +# ) +oci_tarball( + name = "tarball", + # Use the image built for the exec platform rather than the target platform + image = ":image", + repo_tags = [ + "flyr.io/go-devops-cli-app:latest", + ], +) + +# Skaffold needs a target ending with .tar +oci_tarball( + name = "tarball.tar", + # Use the image built for the exec platform rather than the target platform + image = ":image", + repo_tags = ["go-devops-cli-app"], +) + +# See: https://github.com/GoogleContainerTools/container-structure-test#running-structure-tests-through-bazel +container_structure_test( + name = "test", + configs = ["tests/test.yaml"], + # Use the image built for the exec platform rather than the target platform + image = ":image", + timeout = "short" +) diff --git a/projects/go_devops_cli_app/README.md b/projects/go_devops_cli_app/README.md new file mode 100644 index 0000000..f321caa --- /dev/null +++ b/projects/go_devops_cli_app/README.md @@ -0,0 +1,15 @@ +# Overview + +Template for creating FastAPI projects. + +## Roadmap + +- [ ] Setup basic templating +- [ ] Research Cookiecutter +- [ ] Bake-in everything including best practices +- [ ] Test and validate framework +- [ ] Gather feedback from beta testers + +## Known issues + +- [ ] None yet diff --git a/projects/go_devops_cli_app/kubernetes/k8s-pod.yaml b/projects/go_devops_cli_app/kubernetes/k8s-pod.yaml new file mode 100644 index 0000000..9f8fb32 --- /dev/null +++ b/projects/go_devops_cli_app/kubernetes/k8s-pod.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: bazel +spec: + containers: + - name: bazel + image: go-devops-cli-app diff --git a/projects/go_devops_cli_app/skaffold.yaml b/projects/go_devops_cli_app/skaffold.yaml new file mode 100644 index 0000000..cbfc28b --- /dev/null +++ b/projects/go_devops_cli_app/skaffold.yaml @@ -0,0 +1,19 @@ +# See: +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/multi-config-microservices/skaffold.yaml +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/structure-tests/skaffold.yaml + +apiVersion: skaffold/v4beta5 +kind: Config +metadata: + # skaffold dev -m go-devops-cli-app-config + name: go-devops-cli-app-config +build: + artifacts: + - image: go-devops-cli-app + context: . + bazel: + # target: //projects/go_devops_cli_app:go_devops_cli_app_image.tar + target: //projects/go_devops_cli_app:tarball.tar +manifests: + rawYaml: + - kubernetes/* diff --git a/projects/go_devops_cli_app/src/go.mod b/projects/go_devops_cli_app/src/go.mod new file mode 100644 index 0000000..30ae076 --- /dev/null +++ b/projects/go_devops_cli_app/src/go.mod @@ -0,0 +1,5 @@ +module example.com/mod + +go 1.17 + +require github.com/google/go-cmp v0.5.9 diff --git a/projects/go_devops_cli_app/src/go.sum b/projects/go_devops_cli_app/src/go.sum new file mode 100644 index 0000000..62841cd --- /dev/null +++ b/projects/go_devops_cli_app/src/go.sum @@ -0,0 +1,2 @@ +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= diff --git a/projects/go_devops_cli_app/src/main.go b/projects/go_devops_cli_app/src/main.go new file mode 100644 index 0000000..80244e6 --- /dev/null +++ b/projects/go_devops_cli_app/src/main.go @@ -0,0 +1,10 @@ +package main + +import ( + "fmt" + "github.com/google/go-cmp/cmp" +) + +func main() { + fmt.Println(cmp.Diff("Hello World", "Hello Go")) +} diff --git a/projects/go_devops_cli_app/tests/test.yaml b/projects/go_devops_cli_app/tests/test.yaml new file mode 100644 index 0000000..612dfe3 --- /dev/null +++ b/projects/go_devops_cli_app/tests/test.yaml @@ -0,0 +1,5 @@ +schemaVersion: 2.0.0 +commandTests: + - name: 'test' + command: '/app' + expectedOutput: ['"Hello World"'] diff --git a/projects/go_devops_cli_app/tmp/WORKSPACE.bazel b/projects/go_devops_cli_app/tmp/WORKSPACE.bazel new file mode 100644 index 0000000..3b5a76e --- /dev/null +++ b/projects/go_devops_cli_app/tmp/WORKSPACE.bazel @@ -0,0 +1,47 @@ +workspace(name = "skaffold") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_docker", + sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf", + urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"], +) + +http_archive( + name = "io_bazel_rules_go", + sha256 = "a8d6b1b354d371a646d2f7927319974e0f9e52f73a2452d2b3877118169eb6bb", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.23.3/rules_go-v0.23.3.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.23.3/rules_go-v0.23.3.tar.gz", + ], +) + +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +go_rules_dependencies() + +go_register_toolchains( + go_version = "1.14.4", +) + +load( + "@io_bazel_rules_docker//repositories:repositories.bzl", + container_repositories = "repositories", +) + +container_repositories() + +load( + "@io_bazel_rules_docker//repositories:deps.bzl", + container_deps = "deps", +) + +container_deps() + +load( + "@io_bazel_rules_docker//go:image.bzl", + _go_image_repos = "repositories", +) + +_go_image_repos() diff --git a/projects/go_devops_cli_app/tmp/skaffold.yaml b/projects/go_devops_cli_app/tmp/skaffold.yaml new file mode 100644 index 0000000..d04cd46 --- /dev/null +++ b/projects/go_devops_cli_app/tmp/skaffold.yaml @@ -0,0 +1,64 @@ +# apiVersion: skaffold/v4beta5 +# kind: Config +# metadata: +# # skaffold build -m devops-app-config +# name: go-devops-app-config +# build: +# artifacts: +# - image: py_devops_image +# # context: projects/py_devops_fastapi_app +# context: . +# bazel: +# target: //projects/py_devops_fastapi_app:py_devops_fastapi_app_tarball.tar + # - image: my-app:latest + # bazel: + # target: //my-app:image + # - image: my-other-app:latest + # bazel: + # target: //my-other-app:image +# deploy: +# kubectl: +# manifests: +# - k8s/k8s-pod.yaml +# kustomize: +# configs: +# - k8s/kustomization.yaml +# profiles: +# - name: development +# helm: +# chart: my-app +# version: 0.1.0 +# values: +# ENVIRONMENT: development +# - name: production +# helm: +# chart: my-app +# version: 0.1.0 +# values: +# ENVIRONMENT: production +# portForward: +# - resourceType: deployment +# resourceName: leeroy-web +# port: 8080 +# localPort: 9000 +# - resourceType: deployment +# resourceName: leeroy-app +# port: http +# localPort: 9001 + + +# See: +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/multi-config-microservices/skaffold.yaml +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/structure-tests/skaffold.yaml + +apiVersion: skaffold/v4beta5 +kind: Config +metadata: + # skaffold build -m go-devops-app-config + name: go-skaffold-example-config +build: + artifacts: + - image: devops-skaffold-bazel + context: . + bazel: + target: //projects/go_devops_cli_app:skaffold_example.tar diff --git a/projects/go_devops_cli_app/tmp/tests/container_test.yaml b/projects/go_devops_cli_app/tmp/tests/container_test.yaml new file mode 100644 index 0000000..6945536 --- /dev/null +++ b/projects/go_devops_cli_app/tmp/tests/container_test.yaml @@ -0,0 +1,24 @@ +# See: +# - https://github.com/GoogleContainerTools/container-structure-test#command-tests +# - https://github.com/GoogleContainerTools/container-structure-test#running-structure-tests-through-bazel +schemaVersion: 2.0.0 +metadataTest: + entrypoint: ['/opt/projects/py_devops_fastapi_app/run_bin'] + # exposedPorts: ["5000"] +commandTests: + # check that the python binary is in the correct location + - name: "python installation" + command: "which" + args: ["python"] + expectedOutput: ["/usr/local/bin/python\n"] + # - name: run + # command: /opt/projects/py_devops_fastapi_app/run_bin + # expectedOutput: ['I am alive'] +fileExistenceTests: +- name: 'run_bin' + path: '/opt/projects/py_devops_fastapi_app/run_bin' + shouldExist: true + permissions: '-r-xr-xr-x' + # uid: 1000 + # gid: 1000 + # isExecutableBy: 'group' diff --git a/projects/py_devops_fastapi_app/BUILD.bazel b/projects/py_devops_fastapi_app/BUILD.bazel index 3e703f2..ed7b61d 100644 --- a/projects/py_devops_fastapi_app/BUILD.bazel +++ b/projects/py_devops_fastapi_app/BUILD.bazel @@ -65,8 +65,9 @@ py_test( ) + py_image_layer( - name = "web_app_layer", + name = "tar_layer", binary = ":run_bin", root = "/opt", ) @@ -74,10 +75,10 @@ py_image_layer( # TODO: Use a custom base to include cross-cutting concerns # See: https://github.com/bazel-contrib/rules_oci/blob/main/docs/image.md oci_image( - name = "py_devops_image", + name = "py_devops_fastapi_app_image", base = "@distroless_python", entrypoint = ["/opt/projects/py_devops_fastapi_app/run_bin"], - tars = [":web_app_layer"], + tars = [":tar_layer"], ) platform( @@ -98,7 +99,7 @@ platform( platform_transition_filegroup( name = "transitioned_image", - srcs = [":py_devops_image"], + srcs = [":py_devops_fastapi_app_image"], target_platform = select({ "@platforms//cpu:arm64": ":aarch64_linux", "@platforms//cpu:x86_64": ":x86_64_linux", @@ -110,9 +111,13 @@ platform_transition_filegroup( # $ docker run --rm local/py_devops_fastapi_app:latest # See: https://github.com/bazel-contrib/rules_oci/blob/main/docs/tarball.md oci_tarball( - name = "tarball", - image = ":py_devops_image", - repo_tags = ["local/py_devops_fastapi_app:latest"], + name = "py_devops_fastapi_app_tarball.tar", + image = ":py_devops_fastapi_app_image", + repo_tags = [ + # "local/py-devops-fastapi-app", + "py_devops_fastapi_app_tarball", + "py_devops_fastapi_app_tarball.tar", + ], ) # See: @@ -121,6 +126,20 @@ oci_tarball( container_structure_test( name = "container_test", configs = ["tests/container_test.yaml"], - image = ":py_devops_image", + image = ":py_devops_fastapi_app_image", timeout = "short" ) + +# +# Golang +# + +# load("@io_bazel_rules_docker//go:image.bzl", "go_image") + +# go_image( +# name = "skaffold_example", +# srcs = ["main.go"], +# goos = "linux", +# goarch = "amd64", +# static = "on", +# ) diff --git a/projects/py_devops_fastapi_app/README.md b/projects/py_devops_fastapi_app/README.md index f321caa..9091e35 100644 --- a/projects/py_devops_fastapi_app/README.md +++ b/projects/py_devops_fastapi_app/README.md @@ -12,4 +12,4 @@ Template for creating FastAPI projects. ## Known issues -- [ ] None yet +- [ ] Does not work with skaffold yet because we are using rules_oci diff --git a/projects/py_devops_fastapi_app/kubernetes/k8s-pod.yaml b/projects/py_devops_fastapi_app/kubernetes/k8s-pod.yaml new file mode 100644 index 0000000..5dbb098 --- /dev/null +++ b/projects/py_devops_fastapi_app/kubernetes/k8s-pod.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: bazel +spec: + containers: + - name: bazel + image: py-devops-fastapi-app diff --git a/projects/py_devops_fastapi_app/skaffold.yaml b/projects/py_devops_fastapi_app/skaffold.yaml new file mode 100644 index 0000000..2f029b5 --- /dev/null +++ b/projects/py_devops_fastapi_app/skaffold.yaml @@ -0,0 +1,64 @@ +apiVersion: skaffold/v4beta5 +kind: Config +metadata: + # skaffold build -m py-devops-fastapi-app-config + name: py-devops-fastapi-app-config +build: + artifacts: + - image: py_devops_fastapi_app + # context: projects/py_devops_fastapi_app + context: . + bazel: + target: //projects/py_devops_fastapi_app:py_devops_fastapi_app_image.tar +manifests: + rawYaml: + - kubernetes/* + + # - image: my-app:latest + # bazel: + # target: //my-app:image + # - image: my-other-app:latest + # bazel: + # target: //my-other-app:image +# deploy: +# kubectl: +# manifests: +# - k8s/k8s-pod.yaml +# kustomize: +# configs: +# - k8s/kustomization.yaml +# profiles: +# - name: development +# helm: +# chart: my-app +# version: 0.1.0 +# values: +# ENVIRONMENT: development +# - name: production +# helm: +# chart: my-app +# version: 0.1.0 +# values: +# ENVIRONMENT: production +# portForward: +# - resourceType: deployment +# resourceName: leeroy-web +# port: 8080 +# localPort: 9000 +# - resourceType: deployment +# resourceName: leeroy-app +# port: http +# localPort: 9001 + + +# See: +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/multi-config-microservices/skaffold.yaml +# - https://github.com/GoogleContainerTools/skaffold/blob/main/examples/structure-tests/skaffold.yaml + +# apiVersion: skaffold/v4beta5 +# kind: Config +# build: +# artifacts: +# - image: skaffold-bazel +# bazel: +# target: //:skaffold_example.tar diff --git a/projects/py_devops_fastapi_app/tmp/_WORKSPACE.bazel b/projects/py_devops_fastapi_app/tmp/_WORKSPACE.bazel new file mode 100644 index 0000000..dcc0519 --- /dev/null +++ b/projects/py_devops_fastapi_app/tmp/_WORKSPACE.bazel @@ -0,0 +1,51 @@ +workspace(name = "skaffold") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_docker", + sha256 = "b1e80761a8a8243d03ebca8845e9cc1ba6c82ce7c5179ce2b295cd36f7e394bf", + urls = ["https://github.com/bazelbuild/rules_docker/releases/download/v0.25.0/rules_docker-v0.25.0.tar.gz"], +) + +# +# Golang +# + +http_archive( + name = "io_bazel_rules_go", + sha256 = "a8d6b1b354d371a646d2f7927319974e0f9e52f73a2452d2b3877118169eb6bb", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.23.3/rules_go-v0.23.3.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.23.3/rules_go-v0.23.3.tar.gz", + ], +) + +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +go_rules_dependencies() + +go_register_toolchains( + go_version = "1.14.4", +) + +load( + "@io_bazel_rules_docker//repositories:repositories.bzl", + container_repositories = "repositories", +) + +container_repositories() + +load( + "@io_bazel_rules_docker//repositories:deps.bzl", + container_deps = "deps", +) + +container_deps() + +load( + "@io_bazel_rules_docker//go:image.bzl", + _go_image_repos = "repositories", +) + +_go_image_repos() diff --git a/skaffold.yaml b/skaffold.yaml index b9cb4d7..0acaad1 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -1,27 +1,13 @@ -apiVersion: skaffold/v1beta2 +apiVersion: skaffold/v4beta5 kind: Config -build: - artifacts: - - image: my-app:latest - bazel: - target: //my-app:image - - image: my-other-app:latest - bazel: - target: //my-other-app:image -deploy: - kustomize: - configs: - - kustomization.yaml -profiles: -- name: development - helm: - chart: my-app - version: 0.1.0 - values: - ENVIRONMENT: development -- name: production - helm: - chart: my-app - version: 0.1.0 - values: - ENVIRONMENT: production +requires: +# - path: ./leeroy-app +# - path: ./leeroy-web +- path: ./projects/go_devops_cli_app +- path: ./projects/py_devops_fastapi_app + + + +# See: +# - https://github.com/GoogleContainerTools/skaffold/tree/main/examples/multi-config-microservices +# - https://github.com/GoogleContainerTools/skaffold/tree/main/examples/microservices