Skip to content

Commit 01acfc6

Browse files
mjudeikisclaude
andauthored
ci: drop infrastructure and quickstart provider image builds (#292)
* ci: drop infrastructure and quickstart provider image builds These provider images are now built in their own synced-out repos, so the hub no longer needs to build and push them on tags. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: skip infrastructure and quickstart provider helm charts These provider charts are now packaged and published from their own synced-out repos, so exclude them from the hub's helm OCI build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: drop all provider helm charts from hub build All per-provider charts are now packaged and published from their own synced-out repos, so only package the platform charts in deploy/charts/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(hub): resolve system:controllers path to cluster ID for controller providers too The embedded GraphQL listener wasn't the only provider hitting the shard with a workspace path: kedge's own controller-runtime multicluster providers (scheduler, status, edge — core.faros.sh / providers.kedge.faros.sh / admin.kedge.faros.sh) build their base cache over kcpShardConfig with Host set to /clusters/root:kedge:system:controllers. Shards 404 on paths, so the manager crashed at "creating multicluster provider". The multicluster-provider library shares one rest.Config for the base slice cache and the per-endpoint VW connections (it only swaps Host, keeping the client cert), so the cert must be the shard cert and the base cache must address the workspace by ID. Resolve system:controllers -> its logical-cluster ID via the front-proxy and build the shared providersConfig host from the ID. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 3d0289d commit 01acfc6

3 files changed

Lines changed: 21 additions & 89 deletions

File tree

.github/workflows/helm-images.yaml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,10 @@ jobs:
6262
APP_VERSION="${CHART_VERSION}"
6363
fi
6464
65-
# Package and push each platform chart in deploy/charts/ plus every
66-
# per-provider chart in providers/*/deploy/chart/. The provider chart
67-
# dirs are all named "chart", so the chart name is read from the
68-
# Chart.yaml name: field rather than the directory basename.
69-
for chart_dir in deploy/charts/*/ providers/*/deploy/chart/; do
65+
# Package and push each platform chart in deploy/charts/. Per-provider
66+
# charts (providers/*/deploy/chart/) are built and published from their
67+
# own synced-out repos, so they are not packaged here.
68+
for chart_dir in deploy/charts/*/; do
7069
if [ -f "${chart_dir}Chart.yaml" ]; then
7170
chart_name=$(grep -E '^name:' "${chart_dir}Chart.yaml" | head -1 | awk '{print $2}')
7271
echo "Processing chart: $chart_name ($chart_dir)"

.github/workflows/images.yaml

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ env:
2020
REGISTRY: ghcr.io
2121
HUB_IMAGE_NAME: ${{ github.repository }}-hub
2222
AGENT_IMAGE_NAME: ${{ github.repository }}-agent
23-
INFRASTRUCTURE_PROVIDER_IMAGE_NAME: ${{ github.repository }}-infrastructure-provider
24-
QUICKSTART_PROVIDER_IMAGE_NAME: ${{ github.repository }}-quickstart-provider
2523

2624
jobs:
2725
build-and-push-hub-image:
@@ -105,77 +103,3 @@ jobs:
105103
VERSION=${{ github.ref_name }}
106104
GIT_COMMIT=${{ github.sha }}
107105
BUILD_DATE=${{ github.event.release.created_at }}
108-
109-
build-and-push-infrastructure-provider-image:
110-
runs-on: ubuntu-latest
111-
permissions:
112-
contents: read
113-
packages: write
114-
steps:
115-
- name: Checkout repository
116-
uses: actions/checkout@v4
117-
118-
- name: Log in to the Container registry
119-
if: github.event_name != 'pull_request'
120-
uses: docker/login-action@v3
121-
with:
122-
registry: ${{ env.REGISTRY }}
123-
username: ${{ github.actor }}
124-
password: ${{ secrets.GITHUB_TOKEN }}
125-
126-
- name: Set up Docker Buildx
127-
uses: docker/setup-buildx-action@v3
128-
129-
- name: Extract metadata (tags, labels) for Docker
130-
id: meta
131-
uses: docker/metadata-action@v5
132-
with:
133-
images: ${{ env.REGISTRY }}/${{ env.INFRASTRUCTURE_PROVIDER_IMAGE_NAME }}
134-
135-
- name: Build and push Docker image
136-
uses: docker/build-push-action@v6
137-
with:
138-
context: ./providers/infrastructure
139-
file: ./providers/infrastructure/Dockerfile
140-
# Multi-arch on release; single-arch build-only on PRs (no QEMU emulation cost).
141-
platforms: ${{ github.event_name == 'pull_request' && 'linux/amd64' || 'linux/amd64,linux/arm64' }}
142-
push: ${{ github.event_name != 'pull_request' }}
143-
tags: ${{ steps.meta.outputs.tags }}
144-
labels: ${{ steps.meta.outputs.labels }}
145-
146-
build-and-push-quickstart-provider-image:
147-
runs-on: ubuntu-latest
148-
permissions:
149-
contents: read
150-
packages: write
151-
steps:
152-
- name: Checkout repository
153-
uses: actions/checkout@v4
154-
155-
- name: Log in to the Container registry
156-
if: github.event_name != 'pull_request'
157-
uses: docker/login-action@v3
158-
with:
159-
registry: ${{ env.REGISTRY }}
160-
username: ${{ github.actor }}
161-
password: ${{ secrets.GITHUB_TOKEN }}
162-
163-
- name: Set up Docker Buildx
164-
uses: docker/setup-buildx-action@v3
165-
166-
- name: Extract metadata (tags, labels) for Docker
167-
id: meta
168-
uses: docker/metadata-action@v5
169-
with:
170-
images: ${{ env.REGISTRY }}/${{ env.QUICKSTART_PROVIDER_IMAGE_NAME }}
171-
172-
- name: Build and push Docker image
173-
uses: docker/build-push-action@v6
174-
with:
175-
context: ./providers/quickstart
176-
file: ./providers/quickstart/Dockerfile
177-
# Multi-arch on release; single-arch build-only on PRs (no QEMU emulation cost).
178-
platforms: ${{ github.event_name == 'pull_request' && 'linux/amd64' || 'linux/amd64,linux/arm64' }}
179-
push: ${{ github.event_name != 'pull_request' }}
180-
tags: ${{ steps.meta.outputs.tags }}
181-
labels: ${{ steps.meta.outputs.labels }}

pkg/hub/server.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -628,17 +628,26 @@ func (s *Server) Run(ctx context.Context) error {
628628
scheme := NewScheme()
629629

630630
// The multicluster provider watches APIExportEndpointSlice which
631-
// lives in the root:kedge:providers workspace. Use kcpShardConfig so
632-
// that connections to shard-direct virtual-workspace URLs (advertised
633-
// in APIExportEndpointSlice.status.endpoints) authenticate against the
631+
// lives in root:kedge:system:controllers. Use kcpShardConfig so that
632+
// connections to shard-direct virtual-workspace URLs (advertised in
633+
// APIExportEndpointSlice.status.endpoints) authenticate against the
634634
// shards' ClientCA, not the front-proxy's. When --kcp-shard-kubeconfig
635635
// is not set, kcpShardConfig == kcpConfig.
636-
// All platform APIExports (+ their APIExportEndpointSlices) live in
637-
// root:kedge:system:controllers, so the multicluster apiexport providers
638-
// resolve their virtual workspaces from there. (Var name kept for
639-
// brevity; it targets system:controllers.)
636+
//
637+
// The provider builds its base slice cache AND its per-endpoint
638+
// connections from this single config — the library only swaps the Host
639+
// per endpoint, keeping the client cert (see multicluster-provider
640+
// provider.endpointSliceUpdate). So the cert must be the shard cert, and
641+
// the base cache must address the workspace by its logical-cluster ID:
642+
// shards only resolve /clusters/<id>, not workspace PATHS (those are a
643+
// front-proxy-only concept and 404 on a shard). Resolve the ID via the
644+
// front-proxy, which does resolve paths.
645+
controllersID, err := resolveLogicalClusterID(ctx, kcpConfig, kcppaths.SystemControllers)
646+
if err != nil {
647+
return fmt.Errorf("resolving system:controllers logical-cluster ID: %w", err)
648+
}
640649
providersConfig := rest.CopyConfig(kcpShardConfig)
641-
providersConfig.Host = apiurl.KCPClusterURL(providersConfig.Host, kcppaths.SystemControllers)
650+
providersConfig.Host = apiurl.KCPClusterURL(providersConfig.Host, controllersID)
642651

643652
// core.faros.sh is the merged APIExport that covers all kedge API groups
644653
// (kedge.faros.sh, tenants.kedge.faros.sh, etc.). Generated by hack/gen-core-apiexport.

0 commit comments

Comments
 (0)