From f956cf54afb0ce2c94f519057b7c895c19ab390e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 11:54:59 +0000 Subject: [PATCH 1/7] chore(deps): update xpkg.upbound.io/upbound/configuration-azure-network docker tag to v0.14.0 --- examples/configuration.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/configuration.yaml b/examples/configuration.yaml index 3d2b661..f77ec0f 100644 --- a/examples/configuration.yaml +++ b/examples/configuration.yaml @@ -3,4 +3,4 @@ kind: Configuration metadata: name: configuration-azure-network spec: - package: xpkg.upbound.io/upbound/configuration-azure-network:v0.13.0 + package: xpkg.upbound.io/upbound/configuration-azure-network:v0.14.0 From 85d89aec753db407a1b8512540e66742882b0bb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:54:01 +0000 Subject: [PATCH 2/7] chore(deps): update docker/setup-buildx-action digest to b5ca514 --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 50b3585..01a3776 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -33,7 +33,7 @@ jobs: steps: - name: Setup Docker Buildx - uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3 + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 with: version: ${{ env.DOCKER_BUILDX_VERSION }} install: true From 3db84feb5efea5098ebd664152958e5152c06b79 Mon Sep 17 00:00:00 2001 From: upbot <38707938+upbound-bot@users.noreply.github.com> Date: Wed, 5 Mar 2025 08:12:25 -0600 Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'Makefile'?= =?UTF-8?q?=20with=20remote=20'shared/configurations/Makefile'=20(#95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: upbound-bot --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 93ad6bc..c7bca19 100644 --- a/Makefile +++ b/Makefile @@ -117,7 +117,7 @@ PLATFORMS ?= linux_amd64 # Tool Versions # ------------------ -UP_VERSION = v0.37.1 +UP_VERSION = v0.38.0 UP_CHANNEL = stable CROSSPLANE_CLI_VERSION = v1.18.0 CROSSPLANE_VERSION = v1.18.0-up.1 From e103348e3dee3aab28f53205410978b98c9dff52 Mon Sep 17 00:00:00 2001 From: upbot <38707938+upbound-bot@users.noreply.github.com> Date: Mon, 10 Mar 2025 07:04:15 -0500 Subject: [PATCH 4/7] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'Makefile'?= =?UTF-8?q?=20with=20remote=20'shared/configurations/Makefile'=20(#96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: upbound-bot --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index c7bca19..0c292e7 100644 --- a/Makefile +++ b/Makefile @@ -150,6 +150,12 @@ UPTEST_DEFAULT_TIMEOUT ?= 2400s KCL_COMPOSITION_PATH ?= apis/kcl/generate.k LANG_KCL := $(shell find ./apis -type f -name '*.k') +# Overwrite example list if it is set by CI +# For example with comment `/test-examples="path/to/example.yaml"` +ifdef UPTEST_EXAMPLE_LIST + UPTEST_INPUT_MANIFESTS=$(UPTEST_EXAMPLE_LIST) +endif + # Include makelib files # ------------------ -include build/makelib/common.mk From 25f7da999970831b9e943837f98ae5218de59038 Mon Sep 17 00:00:00 2001 From: Yury Tsarev Date: Wed, 12 Mar 2025 17:38:57 +0100 Subject: [PATCH 5/7] Switch to New Upbound DevEx (#97) * Refactor to devex + tests Signed-off-by: Yury Tsarev * add e2etests Signed-off-by: Yury Tsarev * Fix e2e failure of resourcegroup, adjust e2e test Signed-off-by: Yury Tsarev * Add upbound oidc providerconfig Signed-off-by: Yury Tsarev * Full migration to new devex Signed-off-by: Yury Tsarev * Simplify embedded fields according to feedback Signed-off-by: Yury Tsarev * Switch to up cli based workflows * Add Composition Test workflows * Replace e2e test workflow with up cli based one Signed-off-by: Yury Tsarev * Add build project step, rename jobs where necessary Signed-off-by: Yury Tsarev * Add temporary step for downloading patched chainsaw Signed-off-by: Yury Tsarev * Rename e2e step Signed-off-by: Yury Tsarev * Update readme and e2e workflow Signed-off-by: Yury Tsarev * Put e2e tests behind label on PR event Signed-off-by: Yury Tsarev * Make README more upbound and new devex centric Signed-off-by: Yury Tsarev * Update readme with explicit render instruction including --xrd Also simplify sample XR Signed-off-by: Yury Tsarev * Use strongly typed oxr Signed-off-by: Yury Tsarev --------- Signed-off-by: Yury Tsarev --- .github/workflows/ci.yaml | 78 ++----- .github/workflows/composition-tests.yaml | 32 +++ .github/workflows/e2e.yaml | 43 +++- .gitignore | 12 +- .gitmodules | 3 - .yamllint | 3 + LICENSE | 2 +- Makefile | 250 ----------------------- README.md | 38 ++-- apis/.gitkeep | 0 apis/definition.yaml | 48 ----- apis/pat/composition.yaml | 114 ----------- apis/xnetworks/composition.yaml | 16 ++ apis/xnetworks/definition.yaml | 54 +++++ build | 1 - crossplane.yaml | 23 --- examples/.gitkeep | 0 examples/configuration.yaml | 6 - examples/functions.yaml | 6 - examples/network-xr.yaml | 3 - functions/.gitkeep | 0 functions/xnetwork/kcl.mod | 6 + functions/xnetwork/kcl.mod.lock | 12 ++ functions/xnetwork/main.k | 77 +++++++ functions/xnetwork/model | 1 + project.mk | 4 - render_test.k | 28 --- test/setup.sh | 35 ---- tests/e2etest-xnetwork/kcl.mod | 6 + tests/e2etest-xnetwork/kcl.mod.lock | 12 ++ tests/e2etest-xnetwork/main.k | 56 +++++ tests/e2etest-xnetwork/model | 1 + tests/test-xnetwork/kcl.mod | 6 + tests/test-xnetwork/kcl.mod.lock | 12 ++ tests/test-xnetwork/main.k | 81 ++++++++ tests/test-xnetwork/model | 1 + upbound.yaml | 19 ++ 37 files changed, 476 insertions(+), 613 deletions(-) create mode 100644 .github/workflows/composition-tests.yaml delete mode 100644 Makefile create mode 100644 apis/.gitkeep delete mode 100644 apis/definition.yaml delete mode 100644 apis/pat/composition.yaml create mode 100644 apis/xnetworks/composition.yaml create mode 100644 apis/xnetworks/definition.yaml delete mode 160000 build delete mode 100644 crossplane.yaml create mode 100644 examples/.gitkeep delete mode 100644 examples/configuration.yaml delete mode 100644 examples/functions.yaml create mode 100644 functions/.gitkeep create mode 100644 functions/xnetwork/kcl.mod create mode 100644 functions/xnetwork/kcl.mod.lock create mode 100644 functions/xnetwork/main.k create mode 120000 functions/xnetwork/model delete mode 100644 project.mk delete mode 100644 render_test.k delete mode 100755 test/setup.sh create mode 100644 tests/e2etest-xnetwork/kcl.mod create mode 100644 tests/e2etest-xnetwork/kcl.mod.lock create mode 100644 tests/e2etest-xnetwork/main.k create mode 120000 tests/e2etest-xnetwork/model create mode 100644 tests/test-xnetwork/kcl.mod create mode 100644 tests/test-xnetwork/kcl.mod.lock create mode 100644 tests/test-xnetwork/main.k create mode 120000 tests/test-xnetwork/model create mode 100644 upbound.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 01a3776..7bcaa18 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,69 +4,35 @@ on: push: branches: - main - - release-* - workflow_dispatch: {} + pull_request: {} + workflow_dispatch: + inputs: + version: + description: Package version (e.g. v0.1.0) + required: false env: - DOCKER_BUILDX_VERSION: 'v0.8.2' - - XPKG_ACCESS_ID: ${{ secrets.XPKG_ACCESS_ID }} + UP_API_TOKEN: ${{ secrets.UP_API_TOKEN }} + UP_ORG: ${{ secrets.UP_ORG }} jobs: - detect-noop: - runs-on: ubuntu-24.04 - outputs: - noop: ${{ steps.noop.outputs.should_skip }} - steps: - - name: Detect No-op Changes - id: noop - uses: fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # v5.3.1 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - paths_ignore: '["**.md", "**.png", "**.jpg"]' - do_not_skip: '["workflow_dispatch", "schedule", "push"]' - - publish-artifacts: - runs-on: ubuntu-24.04 - needs: detect-noop - if: needs.detect-noop.outputs.noop != 'true' - + deploy: + runs-on: ubuntu-latest steps: - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 - with: - version: ${{ env.DOCKER_BUILDX_VERSION }} - install: true - - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - with: - submodules: true - - - name: Fetch History - run: git fetch --prune --unshallow + id: checkout + uses: actions/checkout@v4 - - name: Build Artifacts - run: make -j2 build.all - env: - # We're using docker buildx, which doesn't actually load the images it - # builds by default. Specifying --load does so. - BUILD_ARGS: "--load" - - - name: Publish Artifacts to GitHub - uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 + - name: Install and login with up + if: env.UP_API_TOKEN != '' && env.UP_ORG != '' + uses: upbound/action-up@v1 with: - name: output - path: _output/** + api-token: ${{ secrets.UP_API_TOKEN }} + organization: ${{ secrets.UP_ORG }} - - name: Login to Upbound - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 - if: env.XPKG_ACCESS_ID != '' + - name: Build and Push Upbound project + if: env.UP_API_TOKEN != '' + uses: upbound/action-up-project@v1 with: - registry: xpkg.upbound.io - username: ${{ secrets.XPKG_ACCESS_ID }} - password: ${{ secrets.XPKG_TOKEN }} - - - name: Publish Artifacts - if: env.XPKG_ACCESS_ID != '' - run: make -j2 publish BRANCH_NAME=${GITHUB_REF##*/} + push-project: true + tag: ${{ inputs.version || '' }} diff --git a/.github/workflows/composition-tests.yaml b/.github/workflows/composition-tests.yaml new file mode 100644 index 0000000..d0dc761 --- /dev/null +++ b/.github/workflows/composition-tests.yaml @@ -0,0 +1,32 @@ +name: Composition Tests + +on: + push: + branches: + - main + pull_request: {} + +env: + UP_API_TOKEN: ${{ secrets.UP_API_TOKEN }} + UP_ORG: ${{ secrets.UP_ORG }} + +jobs: + composition-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Install and login with up + if: env.UP_API_TOKEN != '' && env.UP_ORG != '' + uses: upbound/action-up@v1 + with: + api-token: ${{ secrets.UP_API_TOKEN }} + organization: ${{ secrets.UP_ORG }} + + - name: Build project + run: up project build + + - name: Run composition tests + run: up test run tests/* diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index d310447..4165af3 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -1,14 +1,41 @@ name: End to End Testing on: - issue_comment: - types: [created] + pull_request: + types: + - synchronize + - labeled + +env: + UP_API_TOKEN: ${{ secrets.UP_API_TOKEN }} + UP_ORG: ${{ secrets.UP_ORG }} jobs: e2e: - uses: upbound/official-providers-ci/.github/workflows/pr-comment-trigger.yml@main - with: - package-type: configuration - secrets: - UPTEST_CLOUD_CREDENTIALS: ${{ secrets.UPTEST_CLOUD_CREDENTIALS }} - UPTEST_DATASOURCE: ${{ secrets.UPTEST_DATASOURCE }} + if: contains(github.event.pull_request.labels.*.name, 'run-e2e-tests') + runs-on: ubuntu-latest + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Install and login with up + if: env.UP_API_TOKEN != '' && env.UP_ORG != '' + uses: upbound/action-up@v1 + with: + api-token: ${{ secrets.UP_API_TOKEN }} + organization: ${{ secrets.UP_ORG }} + + - name: Build project + run: up project build + + - name: Switch up context + run: up ctx ${{ secrets.UP_ORG }}/upbound-gcp-us-central-1/default + + - name: Download and install Upbound-enhanced Chainsaw(remove me later) + run: | + curl -L -o /usr/local/bin/chainsaw https://yurychainsaw.blob.core.windows.net/chainsaw/chainsaw + chmod +x /usr/local/bin/chainsaw + + - name: Run e2e tests + run: up test run tests/* --e2e diff --git a/.gitignore b/.gitignore index c3e81fd..89f7895 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,3 @@ -/.cache -/.work -/_output -/results -/.idea - -*.xpkg -kubeconfig -crossplane-azure-provider-key.json \ No newline at end of file +_output +.venv +.up diff --git a/.gitmodules b/.gitmodules index 394e1ee..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "build"] - path = build - url = https://github.com/crossplane/build.git diff --git a/.yamllint b/.yamllint index 669c864..0c59b35 100644 --- a/.yamllint +++ b/.yamllint @@ -3,3 +3,6 @@ extends: default rules: line-length: disable document-start: disable + indentation: + spaces: consistent + indent-sequences: false diff --git a/LICENSE b/LICENSE index 261eeb9..f49a4e1 100644 --- a/LICENSE +++ b/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 0c292e7..0000000 --- a/Makefile +++ /dev/null @@ -1,250 +0,0 @@ -# ==================================================================================== -# Crossplane Configuration Package Makefile -# ==================================================================================== - -# USAGE DOCUMENTATION -# ==================================================================================== -# -# This is a generic Makefile to be used across repositories building Crossplane -# configuration packages. It provides a comprehensive set of targets for development, -# testing, and deployment. -# -# PROJECT CONFIGURATION -# ------------------- -# Create a project.mk file in your repository to configure project-specific settings. -# Required variables: -# - PROJECT_NAME: Name of your Crossplane configuration package -# -# Example project.mk: -# PROJECT_NAME = custom-config -# UPTEST_DEFAULT_TIMEOUT = 3600s -# UPTEST_SKIP_IMPORT = true -# -# PRIMARY TARGETS -# -------------- -# -# Development Tools: -# ----------------- -# - `yamllint` -# Runs yamllint recursively on all files in the `api` folder to ensure YAML -# quality and consistency -# -# - `check-examples` -# Validates consistency between example configurations and dependencies: -# - Compares Function package versions in examples/ against crossplane.yaml -# - Ensures all Function versions in examples match dependency declarations -# - Helps prevent version mismatches that could cause deployment issues -# Example errors: -# - Example using function-foo:v1.2.0 while crossplane.yaml specifies v1.1.0 -# - Missing Function dependencies in crossplane.yaml that are used in examples -# Usage: Run before committing changes to ensure example validity -# -# Rendering and Validation: -# ----------------- -# - `render` -# Renders the composition output for rapid feedback during template development. -# Requirements: -# - Claims must have these annotations: -# render.crossplane.io/composition-path: apis/pat/composition.yaml -# render.crossplane.io/function-path: examples/functions.yaml -# Note: This only populates the cache. Use `render.show` to view output. -# -# - `render.show` -# Displays the rendered YAML output. Useful for: -# - Manual validation -# - Piping to validation tools, e.g.: -# make render.show | crossplane beta validate crossplane.yaml - -# -# Testing: -# ----------------- -# - `render.test` -# Executes kcl-unit tests on rendered manifests. Tests should be: -# - Located in the `test` folder -# - Written as standard kcl-tests -# This ensures the rendered output meets expected specifications. -# -# - `e2e` -# Comprehensive end-to-end testing, including: -# - Cluster creation -# - Configuration setup -# - Testing create, import, and delete operations -# -# Cloud Provider Requirements: -# For configurations creating cloud provider resources, set: -# UPTEST_CLOUD_CREDENTIALS - Provider-specific credentials: -# - AWS: export UPTEST_CLOUD_CREDENTIALS=$(cat ~/.aws/credentials) -# - GCP: export UPTEST_CLOUD_CREDENTIALS=$(cat gcp-sa.json) -# - Azure: export UPTEST_CLOUD_CREDENTIALS=$(cat azure.json) -# -# Configuration Options: -# - UPTEST_SKIP_DELETE (default: false) -# Skip deletion testing of created resources -# - UPTEST_SKIP_UPDATE (default: false) -# Skip testing of claim updates -# - UPTEST_SKIP_IMPORT (default: false) -# Skip testing of resource imports -# -# Example Usage: -# make e2e UPTEST_SKIP_DELETE=true -# -# LANGUAGE-SPECIFIC OPTIONS -# ------------------------ -# -# KCL Support: -# - KCL_COMPOSITION_PATH -# Path to the KCL file generating composition.yaml -# Default: apis/kcl/generate.k -# -# NOTE: The platform setting is constrained to linux_amd64 as Configuration package -# images are not architecture-specific. This avoids unnecessary multi-arch image -# generation. - -# ==================================================================================== -# Project Configuration -# ==================================================================================== - -# Include project.mk for project specific settings -include project.mk - -ifndef PROJECT_NAME - $(error PROJECT_NAME is not set. Please create `project.mk` and set it there.) -endif - -# Project Configuration -# ------------------ -PROJECT_REPO := github.com/upbound/$(PROJECT_NAME) -PLATFORMS ?= linux_amd64 - -# Tool Versions -# ------------------ -UP_VERSION = v0.38.0 -UP_CHANNEL = stable -CROSSPLANE_CLI_VERSION = v1.18.0 -CROSSPLANE_VERSION = v1.18.0-up.1 -UPTEST_VERSION = v1.2.0 - -# Crossplane Configuration -# ------------------ -CROSSPLANE_CHART_REPO = https://charts.upbound.io/stable -CROSSPLANE_CHART_NAME = universal-crossplane -CROSSPLANE_NAMESPACE = upbound-system -CROSSPLANE_ARGS = "--enable-usages" -KIND_CLUSTER_NAME ?= uptest-$(PROJECT_NAME) - -# XPKG Configuration -# ------------------ -XPKG_DIR = $(shell pwd) -XPKG_IGNORE ?= .github/workflows/*.yaml,.github/workflows/*.yml,examples/*.yaml,.work/uptest-datasource.yaml,.cache/render/* -XPKG_REG_ORGS ?= xpkg.upbound.io/upbound -# NOTE: Skip promoting on xpkg.upbound.io as channel tags are inferred -XPKG_REG_ORGS_NO_PROMOTE ?= xpkg.upbound.io/upbound -XPKGS = $(PROJECT_NAME) - -# Testing Configuration -# ------------------ -UPTEST_LOCAL_DEPLOY_TARGET = local.xpkg.deploy.configuration.$(PROJECT_NAME) -UPTEST_DEFAULT_TIMEOUT ?= 2400s - -# KCL Configuration -# ------------------ -KCL_COMPOSITION_PATH ?= apis/kcl/generate.k -LANG_KCL := $(shell find ./apis -type f -name '*.k') - -# Overwrite example list if it is set by CI -# For example with comment `/test-examples="path/to/example.yaml"` -ifdef UPTEST_EXAMPLE_LIST - UPTEST_INPUT_MANIFESTS=$(UPTEST_EXAMPLE_LIST) -endif - -# Include makelib files -# ------------------ --include build/makelib/common.mk --include build/makelib/k8s_tools.mk --include build/makelib/xpkg.mk --include build/makelib/local.xpkg.mk --include build/makelib/controlplane.mk --include build/makelib/uptest.mk - -# ==================================================================================== -# Targets -# ==================================================================================== - -# Initial Setup -# ------------------ -# We want submodules to be set up the first time `make` is run. -# We manage the build/ folder and its Makefiles as a submodule. -# The first time `make` is run, the includes of build/*.mk files will -# all fail, and this target will be run. The next time, the default as defined -# by the includes will be run instead. -fallthrough: submodules ## Initial setup and submodule initialization - @echo Initial setup complete. Running make again . . . - @make - -submodules: ## Update the submodules, including common build scripts - @git submodule sync - @git submodule update --init --recursive - -# Build Targets -# ------------------ -# We must ensure up is installed in tool cache prior to build as including the k8s_tools -# machinery prior to the xpkg machinery sets UP to point to tool cache. -build.init: $(UP) ## Initialize build requirements - -# KCL Targets -# ------------------ -ifdef LANG_KCL -kcl: $(KCL) ## Generate KCL-based Composition - @$(INFO) Generating kcl composition - @$(KCL) $(KCL_COMPOSITION_PATH) 1>/dev/null - @$(OK) Generated kcl composition - -render: kcl ## Render the composition output -build.init: kcl -.PHONY: kcl -endif - -# Testing Targets -# ------------------ -render.test: $(CROSSPLANE_CLI) $(KCL) render ## Test rendered compositions - @for RENDERED_COMPOSITION in $$(find .cache/render -maxdepth 1 -type f -name '*.yaml'); do \ - $(INFO) "Testing $${RENDERED_COMPOSITION}"; \ - export RENDERED_COMPOSITION; \ - $(KCL) test test/ && \ - $(OK) "Success testing \"$${RENDERED_COMPOSITION}\"!" || \ - ($(ERR) "Failure testing \"$${RENDERED_COMPOSITION}\"!" && exit 1); \ - done - -check-examples: ## Validate package versions in examples match dependencies - @$(INFO) Checking if package versions in dependencies match examples - @FN_EXAMPLES=$$( \ - find examples -type f -name "*.yaml" | \ - xargs $(YQ) -r -o=json 'select(.kind == "Function" and (.apiVersion | test("^pkg.crossplane.io/"))) | .spec.package' | \ - sort -u); \ - FN_DEPS=$$( \ - $(YQ) '.spec.dependsOn[] | select(.function != null) | (.function + ":" + .version)' crossplane.yaml | \ - sort -u \ - ); \ - if [ "$$FN_EXAMPLES" != "$$FN_DEPS" ]; then \ - echo "Function package versions in examples and in crossplane.yaml don't match!"; \ - echo "" ; \ - echo "Versions in dependencies:"; \ - echo "---" ; \ - echo "$$FN_DEPS"; \ - echo "" ; \ - echo "Versions in examples:"; \ - echo "---" ; \ - echo "$$FN_EXAMPLES"; \ - exit 1; \ - fi; - @$(OK) Package versions are sane - -# Help Targets -# ------------------ -help: help.local ## Display this help message - -help.local: - @echo "Available targets:" - @echo - @grep -E '^[a-zA-Z_-]+.*:.*?## .*$$' Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' - -.PHONY: uptest e2e render yamllint help help.local check-examples render.test diff --git a/README.md b/README.md index d1ca8a2..99e6c9c 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,40 @@ # Azure Network Configuration -This repository contains a [Crossplane configuration](https://docs.crossplane.io/latest/concepts/packages/#configuration-packages), tailored for users establishing their initial control plane with [Upbound](https://cloud.upbound.io). This configuration deploys fully managed [Azure network](). +This repository contains an Upbound project, tailored for users establishing their initial control plane with [Upbound](https://cloud.upbound.io). This configuration deploys fully managed Azure network resources. ## Overview -The core components of a custom API in [Crossplane](https://docs.crossplane.io/latest/getting-started/introduction/) include: +The core components of a custom API in [Upbound Project](https://docs.upbound.io/learn/control-plane-project/) include: - **CompositeResourceDefinition (XRD):** Defines the API's structure. -- **Composition(s):** Implements the API by orchestrating a set of Crossplane managed resources. +- **Composition(s):** Configures the Functions Pipeline +- **Embedded Function(s):** Encapsulates the Composition logic and implementation within a self-contained, reusable unit -In this specific configuration, the [] API contains: +In this specific configuration, the API contains: -- **an [Azure Network](/apis/definition.yaml) custom resource type.** -- **Composition of the network resources:** Configured in [/apis/composition.yaml](/apis/composition.yaml), it provisions fundamental security and networking resources in the `upbound-system` namespace. +- **an [Azure Network](/apis/xnetworks/definition.yaml) custom resource type.** +- **Composition:** Configured in [/apis/xnetworks/composition.yaml](/apis/xnetworks/composition.yaml), +- **Embedded Function:** The Composition logic is encapuslated within [embedded function](/functions/xnetwork/main.k) -This repository contains an Composite Resource (XR) file. +## Testing + +The configuration can be tested using: + +- `up composition render --xrd=apis/xnetworks/definition.yaml apis/xnetworks/composition.yaml examples/network-xr.yaml` to render the composition +- `up test run tests/*` to run composition tests in `tests/test-xnetwork/` +- `up test run tests/* --e2e` to run end-to-end tests in `tests/e2etest-xnetwork/` ## Deployment -```shell -apiVersion: pkg.crossplane.io/v1 -kind: Configuration -metadata: - name: configuration-azure-network -spec: - package: xpkg.upbound.io/upbound/configuration-azure-network:v0.4.0 -``` +- Execute `up project run` +- Alternatively, install the Configuration from the [Upbound Marketplace](https://marketplace.upbound.io/configurations/upbound/configuration-azure-network) +- Check [examples](/examples/) for example XR(Composite Resource) ## Next steps -This repository serves as a foundational step. To enhance your control plane, consider: +This repository serves as a foundational step. To enhance the configuration, consider: 1. create new API definitions in this same repo 2. editing the existing API definition to your needs - -Upbound will automatically detect the commits you make in your repo and build the configuration package for you. To learn more about how to build APIs for your managed control planes in Upbound, read the guide on Upbound's docs. +To learn more about how to build APIs for your managed control planes in Upbound, read the guide on [Upbound's docs](https://docs.upbound.io/). diff --git a/apis/.gitkeep b/apis/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/apis/definition.yaml b/apis/definition.yaml deleted file mode 100644 index ab927d8..0000000 --- a/apis/definition.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: apiextensions.crossplane.io/v1 -kind: CompositeResourceDefinition -metadata: - name: xnetworks.azure.platform.upbound.io -spec: - group: azure.platform.upbound.io - names: - kind: XNetwork - plural: xnetworks - versions: - - name: v1alpha1 - served: true - referenceable: true - schema: - openAPIV3Schema: - type: object - properties: - spec: - type: object - properties: - parameters: - description: Network Parameters - properties: - id: - type: string - description: ID of this Network that other objects will use to refer to it. - region: - type: string - description: Region is the region you'd like your resource to be created in. - deletionPolicy: - description: Delete the external resources when the Claim/XR is deleted. Defaults to Delete - enum: - - Delete - - Orphan - type: string - default: Delete - providerConfigName: - description: Crossplane ProviderConfig to use for provisioning this resources - type: string - default: default - required: - - deletionPolicy - - providerConfigName - - id - - region - type: object - required: - - parameters diff --git a/apis/pat/composition.yaml b/apis/pat/composition.yaml deleted file mode 100644 index 269d37c..0000000 --- a/apis/pat/composition.yaml +++ /dev/null @@ -1,114 +0,0 @@ -apiVersion: apiextensions.crossplane.io/v1 -kind: Composition -metadata: - name: xnetworks.azure.platform.upbound.io - labels: - provider: azure - type: basic -spec: - writeConnectionSecretsToNamespace: upbound-system - compositeTypeRef: - apiVersion: azure.platform.upbound.io/v1alpha1 - kind: XNetwork - mode: Pipeline - pipeline: - - step: patch-and-transform - functionRef: - name: crossplane-contrib-function-patch-and-transform - input: - apiVersion: pt.fn.crossplane.io/v1beta1 - kind: Resources - patchSets: - - name: providerConfigRef - patches: - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.providerConfigName - toFieldPath: spec.providerConfigRef.name - - name: deletionPolicy - patches: - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.deletionPolicy - toFieldPath: spec.deletionPolicy - - name: network-id - patches: - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.id - toFieldPath: metadata.labels[azure.platform.upbound.io/network-id] - - name: region - patches: - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.region - toFieldPath: spec.forProvider.location - - resources: - - name: resourceGroup - base: - apiVersion: azure.upbound.io/v1beta1 - kind: ResourceGroup - patches: - - type: PatchSet - patchSetName: providerConfigRef - - type: PatchSet - patchSetName: deletionPolicy - - type: PatchSet - patchSetName: network-id - - type: PatchSet - patchSetName: region - - - name: virtualNetwork - base: - apiVersion: network.azure.upbound.io/v1beta2 - kind: VirtualNetwork - spec: - forProvider: - addressSpace: - - 192.168.0.0/16 - resourceGroupNameSelector: - matchControllerRef: true - patches: - - type: PatchSet - patchSetName: providerConfigRef - - type: PatchSet - patchSetName: deletionPolicy - - type: PatchSet - patchSetName: network-id - - type: PatchSet - patchSetName: region - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.id - toFieldPath: metadata.name - transforms: - - type: string - string: - fmt: '%s-vnet' - type: Format - - - name: subnet - base: - apiVersion: network.azure.upbound.io/v1beta2 - kind: Subnet - spec: - forProvider: - addressPrefixes: - - 192.168.1.0/24 - resourceGroupNameSelector: - matchControllerRef: true - serviceEndpoints: - - Microsoft.Sql - virtualNetworkNameSelector: - matchControllerRef: true - patches: - - type: PatchSet - patchSetName: providerConfigRef - - type: PatchSet - patchSetName: deletionPolicy - - type: PatchSet - patchSetName: network-id - - type: FromCompositeFieldPath - fromFieldPath: spec.parameters.id - toFieldPath: metadata.name - transforms: - - type: string - string: - fmt: '%s-sn' - type: Format diff --git a/apis/xnetworks/composition.yaml b/apis/xnetworks/composition.yaml new file mode 100644 index 0000000..a5f08ba --- /dev/null +++ b/apis/xnetworks/composition.yaml @@ -0,0 +1,16 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: xnetworks.azure.platform.upbound.io +spec: + compositeTypeRef: + apiVersion: azure.platform.upbound.io/v1alpha1 + kind: XNetwork + mode: Pipeline + pipeline: + - functionRef: + name: upboundcare-configuration-azure-networkxnetwork + step: xnetwork + - functionRef: + name: crossplane-contrib-function-auto-ready + step: crossplane-contrib-function-auto-ready diff --git a/apis/xnetworks/definition.yaml b/apis/xnetworks/definition.yaml new file mode 100644 index 0000000..6075d19 --- /dev/null +++ b/apis/xnetworks/definition.yaml @@ -0,0 +1,54 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: xnetworks.azure.platform.upbound.io +spec: + group: azure.platform.upbound.io + names: + categories: + - crossplane + kind: XNetwork + plural: xnetworks + versions: + - name: v1alpha1 + referenceable: true + schema: + openAPIV3Schema: + description: XNetwork is the Schema for the XNetwork API. + properties: + spec: + description: XNetworkSpec defines the desired state of XNetwork. + properties: + parameters: + properties: + id: + type: string + description: ID of this Network that other objects will use to refer to it. + region: + type: string + description: Region is the region you'd like your resource to be created in. + deletionPolicy: + description: Delete the external resources when the Claim/XR is deleted. Defaults to Delete + enum: + - Delete + - Orphan + type: string + default: Delete + providerConfigName: + description: Crossplane ProviderConfig to use for provisioning this resources + type: string + default: default + required: + - deletionPolicy + - providerConfigName + - id + - region + type: object + type: object + status: + description: XNetworkStatus defines the observed state of XNetwork. + type: object + required: + - spec + type: object + served: true diff --git a/build b/build deleted file mode 160000 index 1ed1933..0000000 --- a/build +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1ed19332b947c449795fd016f3c21ee0a64930fd diff --git a/crossplane.yaml b/crossplane.yaml deleted file mode 100644 index fea733f..0000000 --- a/crossplane.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: meta.pkg.crossplane.io/v1 -kind: Configuration -metadata: - name: configuration-azure-network - annotations: - meta.crossplane.io/maintainer: Upbound - meta.crossplane.io/source: github.com/upbound/configuration-azure-network - meta.crossplane.io/license: Apache-2.0 - meta.crossplane.io/description: | - This configuration provides a foundation to build and operate Azure networks. - meta.crossplane.io/readme: | - This configuration is used for deploying and managing Azure network clusters on Kubernetes using Crossplane. This setup provides the necessary infrastructure to deploy Azure network managed with Crossplane in Kubernetes. This approach ensures a flexible, streamlined deployment workflow. - - For more details and customization options, you can explore [the GitHub repository](https://github.com/upbound/configuration-app). -spec: - crossplane: - version: ">=v1.14.1-0" - dependsOn: - - provider: xpkg.upbound.io/upbound/provider-azure-network - version: "v1" - - function: xpkg.upbound.io/crossplane-contrib/function-patch-and-transform - # renovate: datasource=github-releases depName=crossplane-contrib/function-patch-and-transform - version: "v0.8.2" diff --git a/examples/.gitkeep b/examples/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/examples/configuration.yaml b/examples/configuration.yaml deleted file mode 100644 index f77ec0f..0000000 --- a/examples/configuration.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: pkg.crossplane.io/v1 -kind: Configuration -metadata: - name: configuration-azure-network -spec: - package: xpkg.upbound.io/upbound/configuration-azure-network:v0.14.0 diff --git a/examples/functions.yaml b/examples/functions.yaml deleted file mode 100644 index b272e3f..0000000 --- a/examples/functions.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: pkg.crossplane.io/v1beta1 -kind: Function -metadata: - name: crossplane-contrib-function-patch-and-transform -spec: - package: xpkg.upbound.io/crossplane-contrib/function-patch-and-transform:v0.8.2 diff --git a/examples/network-xr.yaml b/examples/network-xr.yaml index 73c3bde..d05c7e4 100644 --- a/examples/network-xr.yaml +++ b/examples/network-xr.yaml @@ -1,9 +1,6 @@ apiVersion: azure.platform.upbound.io/v1alpha1 kind: XNetwork metadata: - annotations: - render.crossplane.io/composition-path: apis/pat/composition.yaml - render.crossplane.io/function-path: examples/functions.yaml name: ref-azure-network spec: parameters: diff --git a/functions/.gitkeep b/functions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/functions/xnetwork/kcl.mod b/functions/xnetwork/kcl.mod new file mode 100644 index 0000000..3fb730b --- /dev/null +++ b/functions/xnetwork/kcl.mod @@ -0,0 +1,6 @@ +[package] +name = "xnetwork" +version = "0.0.1" + +[dependencies] +models = { path = "./model" } diff --git a/functions/xnetwork/kcl.mod.lock b/functions/xnetwork/kcl.mod.lock new file mode 100644 index 0000000..7756095 --- /dev/null +++ b/functions/xnetwork/kcl.mod.lock @@ -0,0 +1,12 @@ +[dependencies] + [dependencies.model] + name = "model" + full_name = "models_0.0.1" + version = "0.0.1" + reg = "ghcr.io" + repo = "kcl-lang/model" + oci_tag = "0.0.1" + [dependencies.models] + name = "models" + full_name = "models_0.0.1" + version = "0.0.1" diff --git a/functions/xnetwork/main.k b/functions/xnetwork/main.k new file mode 100644 index 0000000..4a81f8c --- /dev/null +++ b/functions/xnetwork/main.k @@ -0,0 +1,77 @@ +import models.io.upbound.azure.network.v1beta1 as networkv1beta1 +import models.io.upbound.azure.network.v1beta2 as networkv1beta2 +import models.io.upbound.azure.v1alpha1 as azurev1alpha1 +import models.io.upbound.azure.v1beta1 as azurev1beta1 +import models.io.upbound.platform.azure.v1alpha1 as platformazurev1alpha1 +import models.k8s.apimachinery.pkg.apis.meta.v1 as metav1 + +# observed composite resource +oxr = platformazurev1alpha1.XNetwork{**option("params").oxr} +params = oxr.spec.parameters +# observed composed resources +_ocds = option("params").ocds +# desired composite resource +_dxr = option("params").dxr +# desired composed resources +dcds = option("params").dcds + +_metadata = lambda name: str -> any { + { + name = name + annotations = {"krm.kcl.dev/composition-resource-name" = name} + labels = {"azure.platform.upbound.io/network-id" = params.id} + } +} + +# Helper function to add common spec fields +_add_common_spec_fields = lambda spec: any -> any { + spec | { + deletionPolicy = params.deletionPolicy + providerConfigRef.name = params.providerConfigName + } +} + +_items = [ + # Resource Group + azurev1beta1.ResourceGroup { + metadata = _metadata("${params.id}-rg") + spec = _add_common_spec_fields(azurev1beta1.AzureUpboundIoV1beta1ResourceGroupSpec { + forProvider = { + location = params.region + } + }) + } + + # Virtual Network + networkv1beta2.VirtualNetwork { + metadata = _metadata("${params.id}-vnet") + spec = _add_common_spec_fields(networkv1beta2.NetworkAzureUpboundIoV1beta2VirtualNetworkSpec { + forProvider = { + location = params.region + addressSpace = ["192.168.0.0/16"] + resourceGroupNameSelector = { + matchControllerRef = True + } + } + }) + } + + # Subnet + networkv1beta2.Subnet { + metadata = _metadata("${params.id}-sn") + spec = _add_common_spec_fields(networkv1beta2.NetworkAzureUpboundIoV1beta2SubnetSpec { + forProvider = { + addressPrefixes = ["192.168.1.0/24"] + resourceGroupNameSelector = { + matchControllerRef = True + } + serviceEndpoints = ["Microsoft.Sql"] + virtualNetworkNameSelector = { + matchControllerRef = True + } + } + }) + } +] + +items = _items diff --git a/functions/xnetwork/model b/functions/xnetwork/model new file mode 120000 index 0000000..faff6e4 --- /dev/null +++ b/functions/xnetwork/model @@ -0,0 +1 @@ +../../.up/kcl/models \ No newline at end of file diff --git a/project.mk b/project.mk deleted file mode 100644 index 0e8ed00..0000000 --- a/project.mk +++ /dev/null @@ -1,4 +0,0 @@ -PROJECT_NAME := configuration-azure-network -UPTEST_INPUT_MANIFESTS := examples/network-xr.yaml -UPTEST_SKIP_UPDATE := true -UPTEST_SKIP_IMPORT := true diff --git a/render_test.k b/render_test.k deleted file mode 100644 index b925dbf..0000000 --- a/render_test.k +++ /dev/null @@ -1,28 +0,0 @@ -import file -import yaml - -getByCompositeResourceName = lambda name: str -> any { - render = yaml.decode_all(file.read(".cache/render.yaml")) - resource = [ el for el in render if el.metadata.annotations?["crossplane.io/composition-resource-name"] == name][0] - resource -} - -test_vnet_name = lambda { - virtualNetwork = getByCompositeResourceName("virtualNetwork") - assert virtualNetwork.metadata.name == "ref-azure-network-from-xr-vnet" -} - -test_vnet_address = lambda { - virtualNetwork = getByCompositeResourceName("virtualNetwork") - assert virtualNetwork.spec.forProvider.addressSpace[0] == "192.168.0.0/16" -} - -test_vnet_region = lambda { - virtualNetwork = getByCompositeResourceName("virtualNetwork") - assert virtualNetwork.spec.forProvider.location == "westus" -} - -test_subnet_svc_endpoints_sql = lambda { - subnet = getByCompositeResourceName("subnet") - assert subnet.spec.forProvider.serviceEndpoints[0] == "Microsoft.Sql" -} diff --git a/test/setup.sh b/test/setup.sh deleted file mode 100755 index e4d5366..0000000 --- a/test/setup.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -aeuo pipefail - -echo "Running setup.sh" -echo "Waiting until configuration package is healthy/installed..." -"${KUBECTL}" wait configuration.pkg configuration-azure-network --for=condition=Healthy --timeout 5m -"${KUBECTL}" wait configuration.pkg configuration-azure-network --for=condition=Installed --timeout 5m - -echo "Creating cloud credential secret..." -"${KUBECTL}" -n upbound-system create secret generic azure-creds --from-literal=credentials="${UPTEST_CLOUD_CREDENTIALS}" \ - --dry-run=client -o yaml | ${KUBECTL} apply -f - - -echo "Waiting until all installed provider packages are healthy..." -"${KUBECTL}" wait provider.pkg --all --for condition=Healthy --timeout 5m - -echo "Waiting for all pods to come online..." -"${KUBECTL}" -n upbound-system wait --for=condition=Available deployment --all --timeout=5m - -echo "Waiting for all XRDs to be established..." -"${KUBECTL}" wait xrd --all --for condition=Established - -echo "Creating a default provider config..." -cat <=v0.0.0' + description: This configuration provides a foundation to build and operate Azure networks. + license: Apache-2.0 + maintainer: Upbound + readme: | + This configuration is used for deploying and managing Azure network clusters on Kubernetes using Crossplane. This setup provides the necessary infrastructure to deploy Azure network managed with Crossplane in Kubernetes. This approach ensures a flexible, streamlined deployment workflow. + + For more details and customization options, you can explore [the GitHub repository](https://github.com/upbound/configuration-azure-network). + repository: xpkg.upbound.io/upboundcare/configuration-azure-network + source: github.com/upbound/configuration-azure-network From 4464b523540a636d500d71d632ba7e3c27c3bfc0 Mon Sep 17 00:00:00 2001 From: Yury Tsarev Date: Thu, 13 Mar 2025 13:31:36 +0100 Subject: [PATCH 6/7] Switch org from upboundcare->upbound, make testing workflows working for fork-based PRs (#99) * Switch org from upboundcare->upbound Signed-off-by: Yury Tsarev * Switch to up install without auth Signed-off-by: Yury Tsarev * Use pull_request_target for e2e workflow Context: https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/ Signed-off-by: Yury Tsarev --------- Signed-off-by: Yury Tsarev --- .github/workflows/composition-tests.yaml | 15 +++++---------- .github/workflows/e2e.yaml | 5 ++++- apis/xnetworks/composition.yaml | 2 +- upbound.yaml | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/composition-tests.yaml b/.github/workflows/composition-tests.yaml index d0dc761..4c71124 100644 --- a/.github/workflows/composition-tests.yaml +++ b/.github/workflows/composition-tests.yaml @@ -6,10 +6,6 @@ on: - main pull_request: {} -env: - UP_API_TOKEN: ${{ secrets.UP_API_TOKEN }} - UP_ORG: ${{ secrets.UP_ORG }} - jobs: composition-tests: runs-on: ubuntu-latest @@ -18,12 +14,11 @@ jobs: id: checkout uses: actions/checkout@v4 - - name: Install and login with up - if: env.UP_API_TOKEN != '' && env.UP_ORG != '' - uses: upbound/action-up@v1 - with: - api-token: ${{ secrets.UP_API_TOKEN }} - organization: ${{ secrets.UP_ORG }} + - name: Install up + run: | + curl -sL "https://cli.upbound.io" | sh + mv up /usr/local/bin + chmod +x /usr/local/bin/up - name: Build project run: up project build diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 4165af3..ded4ac5 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -1,7 +1,10 @@ name: End to End Testing on: - pull_request: + # https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/ + # pull_request_target is potentially dangerous target so we keep it strict + # under the label and benefit from secret propagation + pull_request_target: types: - synchronize - labeled diff --git a/apis/xnetworks/composition.yaml b/apis/xnetworks/composition.yaml index a5f08ba..ffb9b1e 100644 --- a/apis/xnetworks/composition.yaml +++ b/apis/xnetworks/composition.yaml @@ -9,7 +9,7 @@ spec: mode: Pipeline pipeline: - functionRef: - name: upboundcare-configuration-azure-networkxnetwork + name: upbound-configuration-azure-networkxnetwork step: xnetwork - functionRef: name: crossplane-contrib-function-auto-ready diff --git a/upbound.yaml b/upbound.yaml index 400e519..7601289 100644 --- a/upbound.yaml +++ b/upbound.yaml @@ -15,5 +15,5 @@ spec: This configuration is used for deploying and managing Azure network clusters on Kubernetes using Crossplane. This setup provides the necessary infrastructure to deploy Azure network managed with Crossplane in Kubernetes. This approach ensures a flexible, streamlined deployment workflow. For more details and customization options, you can explore [the GitHub repository](https://github.com/upbound/configuration-azure-network). - repository: xpkg.upbound.io/upboundcare/configuration-azure-network + repository: xpkg.upbound.io/upbound/configuration-azure-network source: github.com/upbound/configuration-azure-network From 1db7ec2579325e1963507bd41ceca067e983e706 Mon Sep 17 00:00:00 2001 From: Yury Tsarev Date: Thu, 13 Mar 2025 15:11:01 +0100 Subject: [PATCH 7/7] Switch back to action-up with skip-login for Composition Tests workflow (#102) Signed-off-by: Yury Tsarev --- .github/workflows/composition-tests.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/composition-tests.yaml b/.github/workflows/composition-tests.yaml index 4c71124..e2f5677 100644 --- a/.github/workflows/composition-tests.yaml +++ b/.github/workflows/composition-tests.yaml @@ -15,10 +15,9 @@ jobs: uses: actions/checkout@v4 - name: Install up - run: | - curl -sL "https://cli.upbound.io" | sh - mv up /usr/local/bin - chmod +x /usr/local/bin/up + uses: upbound/action-up@v1 + with: + skip-login: true - name: Build project run: up project build