Skip to content
Open
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f7389c6
add arm64 support, enable other arch support
gazarenkov Oct 27, 2025
b852eaf
add arm64 support, enable other arch support
gazarenkov Oct 27, 2025
9e57666
Merge remote-tracking branch 'upstream/main' into build-image-on-arm
gazarenkov Oct 27, 2025
70174cb
Regenerate bundle/installer manifests
github-actions[bot] Oct 27, 2025
dbed114
add arm64 support, enable other arch support
gazarenkov Oct 29, 2025
1364364
add arm64 support, enable other arch support
gazarenkov Oct 29, 2025
9b28bfc
portable 'sed -i'
gazarenkov Oct 29, 2025
65dfc29
Merge remote-tracking branch 'origin/build-image-on-arm' into build-i…
gazarenkov Oct 29, 2025
69a1c2b
upgrade go-toolset img
gazarenkov Oct 29, 2025
e67e387
upgrade ubi-minimal img
gazarenkov Oct 29, 2025
bd5d6bc
rhdh-community img
gazarenkov Oct 29, 2025
340f0d9
Regenerate bundle/installer manifests
github-actions[bot] Oct 29, 2025
cfb1914
check sed instead of platform
gazarenkov Oct 31, 2025
b842ba4
Merge remote-tracking branch 'origin/build-image-on-arm' into build-i…
gazarenkov Oct 31, 2025
c97d330
fix rhdh-cr example
gazarenkov Nov 4, 2025
09d671c
fix example
gazarenkov Nov 5, 2025
bb342b9
fix
gazarenkov Nov 6, 2025
5b9067c
Regenerate bundle/installer manifests
github-actions[bot] Nov 6, 2025
3eeca22
Update docs/developer.md
gazarenkov Nov 6, 2025
be87a61
remove arch's affinity
gazarenkov Nov 6, 2025
6d4259d
Regenerate bundle/installer manifests
github-actions[bot] Nov 6, 2025
4387803
Update Dockerfile
gazarenkov Nov 19, 2025
74c8468
Merge remote-tracking branch 'upstream/main' into build-image-on-arm
gazarenkov Nov 19, 2025
18a042c
Merge remote-tracking branch 'origin/build-image-on-arm' into build-i…
gazarenkov Nov 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#@follow_tag(registry.redhat.io/rhel9/go-toolset:latest)
# https://registry.access.redhat.com/ubi9/go-toolset
FROM registry.access.redhat.com/ubi9/go-toolset:9.6-1760420453@sha256:7b1828de52c3bac600a71b81996bf748776a456181a45e2b329b39702cf6486f AS builder
FROM registry.access.redhat.com/ubi9/go-toolset:9.6-1760420453 AS builder
ARG TARGETOS
ARG TARGETARCH
# hadolint ignore=DL3002
Expand Down Expand Up @@ -38,7 +38,7 @@ RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o ma
# Install openssl for FIPS support
#@follow_tag(registry.redhat.io/ubi9/ubi-minimal:latest)
# https://registry.access.redhat.com/ubi9/ubi-minimal
FROM registry.access.redhat.com/ubi9-minimal:9.6-1760515502@sha256:d1bad2a2790eac1651e57e78159a81b72ddfa7b836936b26cf51e09744bf1c2d AS runtime
FROM registry.access.redhat.com/ubi9-minimal:9.6-1760515502 AS runtime
# Downstream uncomment
# RUN cat /cachi2/cachi2.env
#/ Downstream uncomment
Expand Down
10 changes: 7 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ else
BUNDLE_METADATA_PACKAGE_NAME ?= backstage-operator
endif

# SED_I is used for in-place sed command compatibility between GNU and BSD (macOS) sed versions
# Check is based on the fact that GNU sed supports --version; BSD/macOS sed does not.
SED_I := $(shell if sed --version >/dev/null 2>&1; then printf '%s' "-i"; else printf '%s' "-i ''"; fi)

# CHANNELS define the bundle channels used in the bundle.
# Add a new line here if you would like to change its default config. (E.g CHANNELS = "candidate,fast,stable")
# To re-generate a bundle for other specific channels without changing the standard setup, you can:
Expand Down Expand Up @@ -301,9 +305,9 @@ bundle: manifests kustomize operator-sdk ## Generate bundle manifests and metada
cd config/profile/$(PROFILE) && $(KUSTOMIZE) edit set image controller=$(IMG)
$(KUSTOMIZE) build config/manifests/$(PROFILE) | $(OPERATOR_SDK) generate bundle --kustomize-dir config/manifests/$(PROFILE) $(BUNDLE_GEN_FLAGS)
@mv -f bundle.Dockerfile ./bundle/$(PROFILE)/bundle.Dockerfile
@sed -i 's/backstage-operator.v$(VERSION)/$(PROFILE_SHORT)-operator.v$(VERSION)/g' ./bundle/$(PROFILE)/manifests/backstage-operator.clusterserviceversion.yaml
@sed -i 's/backstage-operator/$(BUNDLE_METADATA_PACKAGE_NAME)/g' ./bundle/$(PROFILE)/metadata/annotations.yaml
@sed -i 's/backstage-operator/$(BUNDLE_METADATA_PACKAGE_NAME)/g' ./bundle/$(PROFILE)/bundle.Dockerfile
@sed $(SED_I) 's/backstage-operator.v$(VERSION)/$(PROFILE_SHORT)-operator.v$(VERSION)/g' ./bundle/$(PROFILE)/manifests/backstage-operator.clusterserviceversion.yaml
@sed $(SED_I) 's/backstage-operator/$(BUNDLE_METADATA_PACKAGE_NAME)/g' ./bundle/$(PROFILE)/metadata/annotations.yaml
@sed $(SED_I) 's/backstage-operator/$(BUNDLE_METADATA_PACKAGE_NAME)/g' ./bundle/$(PROFILE)/bundle.Dockerfile
$(OPERATOR_SDK) bundle validate ./bundle/$(PROFILE)

## to update the CSV with a new tagged version of the operator:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ metadata:
}
}
]
createdAt: "2025-10-14T17:57:09Z"
createdAt: "2025-10-29T16:29:37Z"
description: Backstage Operator
operators.operatorframework.io/builder: operator-sdk-v1.37.0
operators.operatorframework.io/project_layout: go.kubebuilder.io/v4
Expand Down Expand Up @@ -243,6 +243,7 @@ spec:
operator: In
values:
- amd64
- arm64
- key: kubernetes.io/os
operator: In
values:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ metadata:
categories: Developer Tools
certified: "true"
containerImage: registry.redhat.io/rhdh/rhdh-rhel9-operator:1.9
createdAt: "2025-10-14T17:57:10Z"
createdAt: "2025-10-29T16:29:39Z"
description: Red Hat Developer Hub is a Red Hat supported version of Backstage.
It comes with pre-built plug-ins and configuration settings, supports use of
an external database, and can help streamline the process of setting up a self-managed
Expand Down Expand Up @@ -334,6 +334,7 @@ spec:
operator: In
values:
- amd64
- arm64
- key: kubernetes.io/os
operator: In
values:
Expand All @@ -357,7 +358,7 @@ spec:
- name: RELATED_IMAGE_postgresql
value: quay.io/fedora/postgresql-15:latest
- name: RELATED_IMAGE_backstage
value: quay.io/rhdh/rhdh-hub-rhel9:next
value: quay.io/rhdh-community/rhdh:next
image: quay.io/rhdh/rhdh-rhel9-operator:1.9
livenessProbe:
httpGet:
Expand Down Expand Up @@ -477,7 +478,7 @@ spec:
relatedImages:
- image: quay.io/fedora/postgresql-15:latest
name: postgresql
- image: quay.io/rhdh/rhdh-hub-rhel9:next
- image: quay.io/rhdh-community/rhdh:next
name: backstage
replaces: rhdh-operator.v1.8.0
version: 1.9.0
4 changes: 2 additions & 2 deletions bundle/rhdh/manifests/rhdh-default-config_v1_configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ data:
- ./install-dynamic-plugins.sh
- /dynamic-plugins-root
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
securityContext:
readOnlyRootFilesystem: true
Expand Down Expand Up @@ -259,7 +259,7 @@ data:
containers:
- name: backstage-backend
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
args:
- "--config"
Expand Down
2 changes: 1 addition & 1 deletion config/manager/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ spec:
operator: In
values:
- amd64
# - arm64
- arm64
# - ppc64le
# - s390x
- key: kubernetes.io/os
Expand Down
4 changes: 2 additions & 2 deletions config/profile/rhdh/default-config/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ spec:
- ./install-dynamic-plugins.sh
- /dynamic-plugins-root
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
securityContext:
readOnlyRootFilesystem: true
Expand Down Expand Up @@ -83,7 +83,7 @@ spec:
containers:
- name: backstage-backend
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
args:
- "--config"
Expand Down
2 changes: 1 addition & 1 deletion config/profile/rhdh/patches/deployment-patch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ spec:
- name: RELATED_IMAGE_postgresql
value: quay.io/fedora/postgresql-15:latest
- name: RELATED_IMAGE_backstage
value: quay.io/rhdh/rhdh-hub-rhel9:next
value: quay.io/rhdh-community/rhdh:next

1 change: 1 addition & 0 deletions dist/backstage.io/install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2315,6 +2315,7 @@ spec:
operator: In
values:
- amd64
- arm64
- key: kubernetes.io/os
operator: In
values:
Expand Down
7 changes: 4 additions & 3 deletions dist/rhdh/install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2336,7 +2336,7 @@ data:
- ./install-dynamic-plugins.sh
- /dynamic-plugins-root
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
securityContext:
readOnlyRootFilesystem: true
Expand Down Expand Up @@ -2375,7 +2375,7 @@ data:
containers:
- name: backstage-backend
# image will be replaced by the value of the `RELATED_IMAGE_backstage` env var, if set
image: quay.io/rhdh/rhdh-hub-rhel9:next
image: quay.io/rhdh-community/rhdh:next
imagePullPolicy: IfNotPresent
args:
- "--config"
Expand Down Expand Up @@ -3192,6 +3192,7 @@ spec:
operator: In
values:
- amd64
- arm64
- key: kubernetes.io/os
operator: In
values:
Expand All @@ -3215,7 +3216,7 @@ spec:
- name: RELATED_IMAGE_postgresql
value: quay.io/fedora/postgresql-15:latest
- name: RELATED_IMAGE_backstage
value: quay.io/rhdh/rhdh-hub-rhel9:next
value: quay.io/rhdh-community/rhdh:next
image: quay.io/rhdh/rhdh-rhel9-operator:1.9
livenessProbe:
httpGet:
Expand Down
14 changes: 9 additions & 5 deletions docs/developer.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ It only takes a few seconds to run, but covers quite a lot of functionality. For

For testing, you will need a Kubernetes cluster, either remote (with sufficient admin rights) or local, such as [minikube](https://kubernetes.io/docs/tasks/tools/#minikube) or [kind](https://kubernetes.io/docs/tasks/tools/#kind)

- Build and push your image to the location specified by `IMG`:
- Build and push your image to the location specified by `IMG`, if your laptop arcitecture is not default (linux/amd64) you may need to specify [PLATFORM](#tested-platforms) as well:
```sh
make image-build image-push IMG=<your-registry>/backstage-operator:tag
make [PLATFORM=<platform>] image-build image-push IMG=<your-registry>/backstage-operator:tag
```

**NOTE:** This image ought to be published in the personal registry you specified.
Expand All @@ -53,6 +53,10 @@ make install
make uninstall
```

#### Tested platforms:
- linux/amd64 - default
- linux/arm64

### Run the controller standalone

You can run your controller standalone (this will run in the foreground, so switch to a new terminal if you want to leave it running)
Expand Down Expand Up @@ -126,9 +130,9 @@ Also note that the [`pr-bundle-diff-checks.yaml`](https://github.com/redhat-deve
#### Build and push images

There are a bunch of commands to build and push to the registry necessary images.
For development purpose, most probably, you will need to specify the image you build and push with IMAGE_TAG_BASE env variable:
For development purpose, you might need to specify the image you build and push with IMAGE_TAG_BASE env variable, if you test on a laptop with non default **linux/amd64** architecture you may need to specify **[PLATFORM](#tested-platforms)** as well:

* `[IMAGE_TAG_BASE=<your-registry>/backstage-operator] make image-build` builds operator manager image (**backstage-operator**)
* `[PLATFORM=<platform>] [IMAGE_TAG_BASE=<your-registry>/backstage-operator] make image-build` builds operator manager image (**backstage-operator**)
* `[IMAGE_TAG_BASE=<your-registry>/backstage-operator] make image-push` pushes operator manager image to **your-registry**
* `[IMAGE_TAG_BASE=<your-registry>/backstage-operator] make bundle-build` builds operator manager image (**backstage-operator-bundle**)
* `[IMAGE_TAG_BASE=<your-registry>/backstage-operator] make bundle-push` pushes bundle image to **your-registry**
Expand All @@ -148,7 +152,7 @@ You can do it all together using:
You can point the namespace where OLM installed. By default, in a vanilla Kubernetes, OLM os deployed on 'olm' namespace. In Openshift you have to explicitly point it to **openshift-marketplace** namespace.

#### Deploy the Operator with OLM
Default namespace to deploy the Operator is called **backstage-system** , this name fits one defined in [kustomization.yaml](../config/default/kustomization.yaml). So, if you consider changing it you have to change it in this file and define **OPERATOR_NAMESPACE** environment variable.
Default namespace to deploy the Operator is called **rhdh-operator** for RHDH profile and **backstage-system** otherwise, if you, by some reason, consider changing it you have to change it in this file and define **OPERATOR_NAMESPACE** environment variable.
Following command creates OperatorGroup and Subscription on Operator namespace
```sh
[OPERATOR_NAMESPACE=<operator-namespace>] make deploy-olm
Expand Down
30 changes: 15 additions & 15 deletions examples/rhdh-cr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,20 @@ data:
includes:
- dynamic-plugins.default.yaml
plugins:
- package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic'
disabled: false
pluginConfig:
catalog:
providers:
github:
myorg:
organization: '${GH_ORG}'
schedule:
# supports cron, ISO duration, "human duration" (used below)
frequency: { minutes: 30}
# supports ISO duration, "human duration (used below)
timeout: { minutes: 3}
initialDelay: { seconds: 15}
# - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic'
# disabled: false
# pluginConfig:
# catalog:
# providers:
# github:
# myorg:
# organization: '${GH_ORG}'
# schedule:
# # supports cron, ISO duration, "human duration" (used below)
# frequency: { minutes: 30}
# # supports ISO duration, "human duration (used below)
# timeout: { minutes: 3}
# initialDelay: { seconds: 15}

---
apiVersion: rhdh.redhat.com/v1alpha4
Expand All @@ -83,7 +83,7 @@ spec:
spec:
containers:
- name: backstage-backend
image: quay.io/rhdh/rhdh-hub-rhel9:latest
image: quay.io/rhdh-community/rhdh:next
application:
appConfig:
configMaps:
Expand Down