Skip to content

Releases: upbound/configuration-aws-network-ts

v0.3.0

Choose a tag to compare

@stevendborrelli stevendborrelli released this 30 Aug 16:48
3a77998

Release Notes - v0.3.0

Release Date: August 30, 2026

Overview

This release adopts the serve module added in
function-sdk-typescript v0.7.0,
which lets a composition function drop the gRPC server it used to assemble by hand.

The Network API is unchanged. The XRD and the Composition are byte-identical to v0.2.0, and
rendering the example produces the same sixteen composed resources. Existing Network resources
need no edits, and there is nothing to do on upgrade.

The one behavioral change is a shutdown fix, described below.

Installing

Configuration Package

apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
  name: configuration-aws-network-ts
spec:
  package: xpkg.upbound.io/upbound/configuration-aws-network-ts:v0.3.0

Function Package

The composition function is embedded in the configuration package and is published and installed
along with it. There is no separate function package to install or reference yourself.

Upgrading from v0.2.0

No action required. The API, the Composition and the set of composed resources are unchanged.

What's Changed from v0.2.0

Fixed: the function now shuts down cleanly on SIGTERM

The hand-written entrypoint trapped only SIGINT. Kubernetes sends SIGTERM, so every rollout
of the function was terminating it ungracefully rather than letting it drain. The SDK's serve()
handles both signals, so this is fixed as a side effect of adopting it.

This is the only change in this release that alters runtime behaviour.

The function is now a single function

src/main.ts went from 85 lines to 6. Flag parsing, logger construction, server startup and
signal handling were scaffolded boilerplate that had never been edited — serve() does all of
it:

#!/usr/bin/env node

import { serve } from '@crossplane-org/function-sdk-typescript';
import { compose } from './function.js';

serve(compose, { name: 'configuration-aws-network' });

src/function.ts is now a ComposeFunction rather than a class implementing FunctionHandler.
It receives a response already built from the request, so the to(req) preamble and the
getDesiredComposedResources() / setDesiredComposedResources() round trip are gone.

The function also gained a -h, --help flag, which the previous entrypoint never advertised.

Composed resources are built with the SDK's helper

Ten repetitions of

desiredComposed['igw'] = Resource.fromJSON({ resource: igw.toJSON() });

became desiredComposed['igw'] = fromModel(igw). The two produce identical protobuf encodings.

The XR status type comes from the generated model

XRStatus was hand-written as { [key: string]: string | string[] }, which restated the status
block in apis/network/definition.yaml and accepted any field name at all. It is now
NonNullable<INetwork['status']>, taken from the model generated from the XRD, so the XRD is the
single source of truth and a misspelt status field fails to compile.

Dependencies

Dependency v0.2.0 v0.3.0
@crossplane-org/function-sdk-typescript ^0.6.0 ^0.7.0
commander ^15.0.0 removed
pino ^10.3.0 removed

commander and pino were only used by the entrypoint that serve() replaced. Neither is a
direct dependency any more, so both drop out of the function image.

Testing

  • Added coverage for the invalid-input path, which had none: an XR missing a required parameter
    now has tests asserting it produces a fatal result naming the field and composes no resources.
    This matters because the SDK types an observed resource as { [key: string]: any }, so no XR
    parameter is checked at compile time and validate() is the only guard.
  • 18 tests to 21.

Developer experience

  • crossplane project run can now bring up a working dev cluster in one command, with the
    namespace and ProviderConfig it needs:

    crossplane project run \
      --init-resources=examples/network/namespace-network-team.yaml \
      --extra-resources=examples/network/providerconfig.yaml
  • Added a pre-commit hook in .githooks/ that refuses to commit AWS credentials, since
    examples/network/providerconfig.yaml is tracked with placeholders and meant to be edited
    locally. Enable it with git config core.hooksPath .githooks.

  • The README now documents building the crossplane CLI from source, which is a prerequisite
    for working on this repository and was previously left for the reader to work out.

  • CI pins the CLI build to a commit rather than a branch, so a release build cannot change
    underneath us.

What's Changed

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@stevendborrelli stevendborrelli released this 30 Aug 08:19
ce76bbe

Release Notes - v0.2.0

Release Date: August 27, 2026

Overview

This release ports the repository to the Crossplane project
workflow. crossplane project build and crossplane project push replace the hand-written
Dockerfile, five shell scripts and an env file, and the composition function is now embedded
in the configuration package rather than built and published separately.

The Network API is unchanged. The XRD is byte-identical to v0.1.1, and rendering the example
produces the same sixteen composed resources. Existing Network resources need no edits.

The notable change for users is the Crossplane version floor: this release requires Crossplane
v2.0.0 or later
.

Note that to develop a Crossplane Project in typescript you must use the branch at crossplane/cli#170.

Installing

Configuration Package

apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
  name: configuration-aws-network-ts
spec:
  package: xpkg.upbound.io/upbound/configuration-aws-network-ts:v0.2.0

Function Package

The composition function is now embedded in the configuration package and is published and
installed along with it. There is no longer a separate function package to install or reference
yourself.

Upgrading from v0.1.1

Crossplane v2 is now required

The package metadata declares crossplane.version: ">=v2.0.0-0", up from ">=v1.17.0-0".

In practice this corrects metadata that was already understated: the XRD has been
apiextensions.crossplane.io/v2 with scope: Namespaced since v0.1.1, which Crossplane 1.x
cannot serve. The constraint now records what the package actually needs.

Namespaced managed resources must be activated

Crossplane 2 does not activate namespaced managed resources by default. Without a
ManagedResourceActivationPolicy the composed resources are created but never reconciled — they
simply sit there, which is a confusing failure to diagnose.

The package now ships one at apis/network/mrap.yaml covering every EC2 kind this configuration
composes, so a normal install needs no action. Note that crossplane composition render does not
need it, so this only shows up on a cluster.

Dependency changes

Dependency v0.1.1 v0.2.0
provider-aws-ec2 v2 >=v2.7.0
function-auto-ready xpkg.upbound.io/crossplane-contrib/… >=v0.6.0 xpkg.crossplane.io/crossplane-contrib/… >=v0.7.0

Note that function-auto-ready also moved registry, from xpkg.upbound.io to
xpkg.crossplane.io.

If you copied the Composition

The pipeline's functionRef.name changed from upbound-configuration-aws-network-ts-function to
upbound-configuration-aws-network-tsnetwork, because the function is now embedded rather than a
separately published package. This only affects you if you vendored composition.yaml into your
own repository; installing the configuration package needs no action.

What's Changed from v0.1.1

Packaging and build

  • crossplane project build produces the multi-arch configuration package with the embedded
    function image baked in, replacing the Dockerfile, scripts/, env and per-arch
    xpkg build invocations.
  • crossplane project push publishes the configuration together with the embedded function
    package it depends on.
  • crossplane-project.yaml replaces package/crossplane.yaml and
    package-function/crossplane.yaml.

Repository layout

Before After
function.ts, main.ts at the repository root functions/network/src/
package/apis/network/ apis/network/ (plus mrap.yaml)
Dockerfile, scripts/, env crossplane project build / push

Types are generated from the CRDs

The function's TypeScript types now come from a crossplane-models package generated at build
time from the CRDs of every dependency plus the XRDs in apis/, rather than the published
@crossplane-models/provider-upjet-aws package. schemas/ is generated and is not checked in.

Testing

Jest was replaced with Vitest. ts-jest caps its typescript peer below 7 while the toolchain
builds with TypeScript 7; Vitest has no typescript peer. The test cases themselves are
unchanged.

CI

  • Seven CI jobs reduced to five (version, cli, test, build, push).
  • GitHub Actions are now consistently SHA-pinned with the version in a trailing comment, and
    moved to current releases (checkout v7.0.1, setup-node v7.0.0, setup-go v7.0.0,
    download-artifact v8.0.1, upload-artifact v7.0.1, setup-qemu v4.2.0, setup-buildx
    v4.3.0, login-action v4.6.0).
  • A Renovate configuration was added.

Note for contributors

Building this project locally requires a crossplane CLI that includes
crossplane/cli#170, which is not in a released CLI
yet. CI builds the CLI from source for this reason. This affects contributors only — it has no
bearing on installing or running the released package.

What's Changed

Full Changelog: v0.1.1...v0.2.0

v0.1.1

Choose a tag to compare

@stevendborrelli stevendborrelli released this 16 Jan 20:51
3bdb6df

Release Notes - v0.1.1

Release Date: January 16, 2026

Overview

This release fixes dependency bugs surfaced after moving the packages to xpkg.upbound.io/upbound from upboundcare.

Installing

Configuration Package

apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
  name: configuration-aws-network-ts
spec:
  package: xpkg.upbound.io/upbound/configuration-aws-network-ts:v0.1.1

Function Package

The function is automatically installed as a dependency of the configuration package, and
has a suffix of -function, i.e., xpkg.upbound.io/upbound/configuration-aws-network-ts-function:v0.1.1

What's Changed from v0.1.0

Bug Fixes

Replace usage of upboundcare with upbound.

What's Changed

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@stevendborrelli stevendborrelli released this 16 Jan 20:41
25ee73d

Release Notes - v0.1.0

Release Date: January 16, 2026

Note v0.1.0 contains a dependency bug, use v0.1.1 or newer.

Overview

This is the first published release of configuration-aws-network-ts, a TypeScript implementation of the Crossplane AWS Network Configuration. This configuration provides a example solution for provisioning AWS networking infrastructure using Crossplane's TypeScript Function SDK.

What's Included

Network Infrastructure

This configuration creates a complete AWS network setup including:

  • VPC with customizable CIDR blocks
  • Subnets (both public and private) across multiple availability zones
  • Internet Gateway for public subnet connectivity
  • Route Tables with automatic associations
  • Security Groups with configurable rules
  • Route Table Associations for subnet routing

Composite Resource API

The configuration provides a high-level Network custom resource with the following capabilities:

  • Namespaced resources for multi-tenant environments

  • Configurable parameters:

    • VPC CIDR block (default: 192.168.0.0/16)
    • Multiple subnets with availability zone and type (public/private) configuration
    • AWS region selection
    • Management policies for resource lifecycle control
    • ProviderConfig name for AWS authentication
  • Status reporting:

    • VPC ID
    • Subnet IDs (all, public, and private)
    • Security Group IDs

TypeScript Function

The configuration includes a custom Crossplane Function written in TypeScript that:

  • Uses the official @crossplane-org/function-sdk-typescript SDK
  • Provides type-safe resource generation with @crossplane-models/provider-upjet-aws
  • Runs as a containerized function with multi-architecture support (amd64/arm64)
  • Uses distroless container images for security and minimal footprint

Developer Experience

  • Testing: Unit tests with Jest
  • Linting: ESLint configuration for code quality
  • Formatting: Prettier for consistent code style
  • Type Checking: TypeScript strict mode with compile-time validation
  • CI/CD: GitHub Actions workflow for automated builds and releases
  • Local Development:
    • npm run local for local function testing
    • crossplane render support for testing compositions
    • Hot reload capabilities during development

Build & Package Support

  • Multi-architecture Docker images (amd64 and arm64)
  • Crossplane package generation for both the function and configuration
  • Automated push to OCI registries
  • Version management with Git-based pseudo-versioning
  • NPM scripts for all build operations

Package Information

Configuration Package

apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
  name: configuration-aws-network-ts
spec:
  package: xpkg.upbound.io/upbound/configuration-aws-network-ts:v0.1.0

Function Package

The function is automatically installed as a dependency of the configuration package, and
hasa suffix of -function, i.e., xpkg.upbound.io/upbound/configuration-aws-network-ts-function:v0.1.0

Getting Started

  1. Install the configuration package in your Crossplane cluster
  2. Configure AWS authentication (see README.md)
  3. Create a ProviderConfig for AWS
  4. Apply the example network resource from examples/network/

For detailed installation and usage instructions, see the README.md.

Requirements

  • Crossplane v1.14.0 or later
  • AWS Provider (upjet-aws) v1.0.0 or later
  • Kubernetes cluster with Crossplane installed

Dependencies

The configuration automatically installs the following dependencies:

  • xpkg.upbound.io/upbound/provider-aws-ec2 - AWS EC2 provider for VPC resources
  • xpkg.upbound.io/upbound/provider-family-aws - AWS provider family
  • The TypeScript function package

Example Usage

apiVersion: aws.platform.upbound.io/v1alpha1
kind: Network
metadata:
  name: my-network
  namespace: network-team
spec:
  parameters:
    id: my-network
    region: us-west-2
    providerConfigName: default
    vpcCidrBlock: 192.168.0.0/16
    subnets:
      - availabilityZone: us-west-2a
        type: public
        cidrBlock: 192.168.0.0/18
      - availabilityZone: us-west-2b
        type: public
        cidrBlock: 192.168.64.0/18
      - availabilityZone: us-west-2a
        type: private
        cidrBlock: 192.168.128.0/18
      - availabilityZone: us-west-2b
        type: private
        cidrBlock: 192.168.192.0/18

Technical Details

Technology Stack

  • Runtime: Node.js 24
  • Language: TypeScript 5.9
  • SDK: Crossplane Function SDK TypeScript v0.3.0
  • Models: @crossplane-models/provider-upjet-aws v2.3.0
  • Testing: Jest v30.2.0
  • Container Base: gcr.io/distroless/nodejs24-debian12

CI/CD Pipeline

The GitHub Actions workflow includes:

  • Version computation with Git-based pseudo-versioning
  • Code quality: Linting with ESLint
  • Testing: Unit tests with Jest
  • Type checking: TypeScript compilation validation
  • Multi-architecture builds: Docker images for amd64 and arm64
  • Package creation: Both function and configuration packages
  • Automated publishing: Push to xpkg.upbound.io registry

License

Apache-2.0

Author

Stefano Borrelli steve@borrelli.org

Support

For issues and questions, please use the GitHub issue tracker at:
https://github.com/upbound/configuration-aws-network-ts/issues

What's Changed

Full Changelog: v0.0.22...v0.1.0

v0.0.8

Choose a tag to compare

@stevendborrelli stevendborrelli released this 08 Jan 10:20
61a6b62

Release Notes - v0.0.8

Overview

This release represents the initial Typescript implementation of the Upbound AWS Network configuration package configuration-aws-network. This configuration creates AWS network infrastructure including VPC, subnets, routing, and security groups.

What's New

Core Implementation

  • Complete TypeScript-based implementation of AWS network configuration
  • Integration with Crossplane Function Typescript SDK v0.1.0
  • Support for AWS Provider Upjet 2.x resources

Network Resources

This configuration creates and manages the following AWS resources:

  • VPC with configurable CIDR blocks and DNS settings
  • Subnets with support for both public and private subnet types
  • Internet Gateway for public internet connectivity
  • Route Tables and Route Table Associations
  • Security Groups with configurable ingress/egress rules
  • Routes for internet gateway connectivity

Configuration Features

  • Namespaced resource deployment
  • Configurable management policies (Create, Observe, Update, Delete, LateInitialize)
  • Support for custom ProviderConfig references
  • Flexible subnet configuration with availability zone selection
  • Automatic resource naming and tagging

Developer Experience

  • TypeScript type safety with @crossplane-models/provider-upjet-aws
  • Unit testing support with Jest
  • Local development and testing with crossplane beta render
  • Multi-platform Docker builds (amd64, arm64)
  • Automated build scripts for both function and configuration packages

Package Distribution

  • Function package: xpkg.upbound.io/upboundcare/configuration-aws-network-ts-function:v0.0.8
  • Configuration package: xpkg.upbound.io/upboundcare/configuration-aws-network-ts:v0.0.8

Installation

Install the configuration package:

apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
  name: configuration-aws-network
spec:
  package: xpkg.upbound.io/upboundcare/configuration-aws-network-ts:v0.0.8

API Reference

Parameters

  • id (string, required): Unique identifier for the network
  • region (string, required): AWS region for resources
  • vpcCidrBlock (string): CIDR block for VPC (default: 192.168.0.0/16)
  • subnets (array, required): List of subnet configurations with:
    • availabilityZone: AWS availability zone
    • type: "public" or "private"
    • cidrBlock: CIDR block for the subnet
  • providerConfigName (string): ProviderConfig reference (default: "default")
  • managementPolicies (array): Resource management operations (default: ["*"])

Status Fields

  • vpcId: Created VPC identifier
  • subnetIds: List of all subnet identifiers
  • publicSubnetIds: List of public subnet identifiers
  • privateSubnetIds: List of private subnet identifiers
  • securityGroupIds: List of security group identifiers

Breaking Changes

None - this is an early release version.

Known Issues

  • Status is not properly populated

Dependencies

  • Crossplane Function SDK TypeScript: v0.1.0
  • AWS Provider Upjet Models: v2.3.0
  • TypeScript: v5.9.3
  • Node.js: v25 (build) / v24 (runtime)

Documentation

See the README.md for complete usage instructions, examples, and development guidelines.

Contributors

Links

What's Changed

New Contributors

Full Changelog: https://github.com/upbound/configuration-aws-network-ts/commits/v0.0.8