Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
0b52052
UPSTREAM: <carry>: Introduce oadp-vmdp CLI (OADP VM Data Protection)
mpryc Dec 15, 2025
7a0e17b
OADP-7565: bump Go toolchain to 1.25.8 and update dependencies
kaovilai Mar 17, 2026
edde104
Merge pull request #3 from migtools/oadp-1.6-go1.25.8
mpryc Mar 18, 2026
56c524b
merge upstream/oadp-1.6 into oadp-1.6
oadp-maintainers Mar 24, 2026
257913d
UPSTREAM: <carry>: Introduce oadp-vmdp CLI (OADP VM Data Protection)
mpryc Dec 15, 2025
53dd6c4
UPSTREAM: <carry>: Add download server for oadp-vmdp binary distribution
mpryc Mar 18, 2026
25d151a
UPSTREAM: <carry>: Rename KOPIA_* env vars to OADP_* in upstream-refa…
oadp-maintainers Mar 24, 2026
272fa6c
UPSTREAM: <carry>: Disable upstream kopia CI workflows, fix lint issues
oadp-maintainers Mar 24, 2026
b7fc939
UPSTREAM: <carry>: Disable dependency-review workflow
oadp-maintainers Mar 24, 2026
5641521
UPSTREAM: <carry>: Bump Containerfile Go base image to 1.25
oadp-maintainers Mar 24, 2026
f336e8c
UPSTREAM: <carry>: Bump govulncheck Go version to 1.25.8 in lint work…
oadp-maintainers Mar 24, 2026
1eb4d6a
UPSTREAM: <carry>: Bump otel SDK to v1.42.0, fix CI setup for oadp-vmdp
oadp-maintainers Mar 24, 2026
79c6504
Merge pull request #7 from oadp-rebasebot/rebase-bot-oadp-1.6
weshayutin Mar 24, 2026
0529f4d
add konflux docker file
weshayutin Mar 26, 2026
d08d901
Merge pull request #8 from weshayutin/konflux
weshayutin Mar 26, 2026
79026c0
UPSTREAM: <carry>: Rename konflux.Containerfile.download to konflux.D…
mpryc Mar 30, 2026
dfff95d
Upstream: <carry>: Use clean binary names in download server
mpryc Apr 1, 2026
2e113bc
UPSTREAM: <carry>: Add OWNERS file
mpryc Apr 1, 2026
58a3c8a
Merge pull request #12 from migtools/add-owners-oadp-1.6
kaovilai Apr 1, 2026
4412e64
UPSTREAM: <carry>: Disable remaining irrelevant GitHub Actions workflows
mpryc Apr 2, 2026
5a317de
UPSTREAM: <carry>: Remove govulncheck from lint workflow
mpryc Apr 2, 2026
a5fd20a
Merge pull request #15 from mpryc/disable-remaining-ci-vmdp-1.6
openshift-merge-bot[bot] Apr 2, 2026
ceed983
Merge pull request #10 from migtools/cherry-pick-clean-names-oadp-1.6
mpryc Apr 2, 2026
490d780
merge upstream/oadp-1.6 into oadp-1.6
oadp-maintainers Apr 8, 2026
d2eef20
UPSTREAM: <carry>: Introduce oadp-vmdp CLI (OADP VM Data Protection)
mpryc Dec 15, 2025
552daf4
UPSTREAM: <carry>: Add download server for oadp-vmdp binary distribution
mpryc Mar 18, 2026
a435199
UPSTREAM: <carry>: Rename KOPIA_* env vars to OADP_* in upstream-refa…
oadp-maintainers Mar 24, 2026
7baad18
UPSTREAM: <carry>: Disable upstream kopia CI workflows, fix lint issues
oadp-maintainers Mar 24, 2026
e70c512
UPSTREAM: <carry>: Bump Containerfile Go base image to 1.25
oadp-maintainers Mar 24, 2026
c5e57c9
UPSTREAM: <carry>: Bump govulncheck Go version to 1.25.8 in lint work…
oadp-maintainers Mar 24, 2026
8720ddc
UPSTREAM: <carry>: Bump otel SDK to v1.42.0, fix CI setup for oadp-vmdp
oadp-maintainers Mar 24, 2026
54f7c3b
add konflux docker file
weshayutin Mar 26, 2026
7a33bd3
UPSTREAM: <carry>: Rename konflux.Containerfile.download to konflux.D…
mpryc Mar 30, 2026
dab7f83
UPSTREAM: <carry>: Remove govulncheck from lint workflow
mpryc Apr 2, 2026
3147114
Upstream: <carry>: Use clean binary names in download server
mpryc Apr 1, 2026
c992956
Merge pull request #18 from oadp-rebasebot/rebase-bot-oadp-1.6
kaovilai Apr 9, 2026
fca9f88
fips enabled on all things
weshayutin Apr 14, 2026
38b1798
Merge pull request #25 from weshayutin/ffff
openshift-merge-bot[bot] Apr 14, 2026
18e1c3d
Remove execute bit from archived binaries in konflux build
mpryc Apr 14, 2026
2be74f7
Merge pull request #27 from mpryc/oadp-1.6-fips
openshift-merge-bot[bot] Apr 14, 2026
e4dfd9e
merge upstream/oadp-1.6 into oadp-1.6
oadp-maintainers May 19, 2026
08dba39
UPSTREAM: <carry>: Introduce oadp-vmdp CLI (OADP VM Data Protection)
mpryc Dec 15, 2025
d2f99f9
UPSTREAM: <carry>: Add download server for oadp-vmdp binary distribution
mpryc Mar 18, 2026
6ce2d7c
UPSTREAM: <carry>: Rename KOPIA_* env vars to OADP_* in upstream-refa…
oadp-maintainers Mar 24, 2026
b6785c5
UPSTREAM: <carry>: Disable upstream kopia CI workflows, fix lint issues
oadp-maintainers Mar 24, 2026
e438540
UPSTREAM: <carry>: Bump Containerfile Go base image to 1.25
oadp-maintainers Mar 24, 2026
505056d
UPSTREAM: <carry>: Bump govulncheck Go version to 1.25.8 in lint work…
oadp-maintainers Mar 24, 2026
06a2ea1
UPSTREAM: <carry>: Bump otel SDK to v1.42.0, fix CI setup for oadp-vmdp
oadp-maintainers Mar 24, 2026
becb7a6
add konflux docker file
weshayutin Mar 26, 2026
fc75e2f
UPSTREAM: <carry>: Rename konflux.Containerfile.download to konflux.D…
mpryc Mar 30, 2026
a034109
UPSTREAM: <carry>: Remove govulncheck from lint workflow
mpryc Apr 2, 2026
773f707
Upstream: <carry>: Use clean binary names in download server
mpryc Apr 1, 2026
4c6522b
fips enabled on all things
weshayutin Apr 14, 2026
99f22d4
Remove execute bit from archived binaries in konflux build
mpryc Apr 14, 2026
42abf9c
fix: bump google.golang.org/grpc to v1.79.3 to address CVE-2026-33186
weshayutin May 20, 2026
20887ef
Merge pull request #30 from weshayutin/cve-grpc-oadp-1.6
weshayutin May 20, 2026
7eeea9a
Merge pull request #23 from oadp-rebasebot/rebase-bot-oadp-1.6
weshayutin May 21, 2026
06ae596
merge upstream/oadp-1.6 into oadp-1.6
oadp-maintainers Jul 1, 2026
3c87b3a
UPSTREAM: <carry>: Introduce oadp-vmdp CLI (OADP VM Data Protection)
mpryc Dec 15, 2025
20584c2
UPSTREAM: <carry>: Add download server for oadp-vmdp binary distribution
mpryc Mar 18, 2026
4a06368
UPSTREAM: <carry>: Rename KOPIA_* env vars to OADP_* in upstream-refa…
oadp-maintainers Mar 24, 2026
ad93361
UPSTREAM: <carry>: Disable upstream kopia CI workflows, fix lint issues
oadp-maintainers Mar 24, 2026
a8cd663
UPSTREAM: <carry>: Bump Containerfile Go base image to 1.25
oadp-maintainers Mar 24, 2026
946d59e
UPSTREAM: <carry>: Bump govulncheck Go version to 1.25.8 in lint work…
oadp-maintainers Mar 24, 2026
c4113f9
UPSTREAM: <carry>: Bump otel SDK to v1.42.0, fix CI setup for oadp-vmdp
oadp-maintainers Mar 24, 2026
7c7b18f
add konflux docker file
weshayutin Mar 26, 2026
835c645
UPSTREAM: <carry>: Rename konflux.Containerfile.download to konflux.D…
mpryc Mar 30, 2026
9a8ae72
UPSTREAM: <carry>: Remove govulncheck from lint workflow
mpryc Apr 2, 2026
dab47eb
Upstream: <carry>: Use clean binary names in download server
mpryc Apr 1, 2026
bb84b6a
fips enabled on all things
weshayutin Apr 14, 2026
7787965
Remove execute bit from archived binaries in konflux build
mpryc Apr 14, 2026
cd61279
fix: bump google.golang.org/grpc to v1.79.3 to address CVE-2026-33186
weshayutin May 20, 2026
2a001c2
UPSTREAM: <drop>: Updating go modules
oadp-maintainers Jul 1, 2026
540eda1
Merge pull request #31 from oadp-rebasebot/rebase-bot-oadp-1.6
openshift-merge-bot[bot] Jul 2, 2026
ceef949
UPSTREAM: <drop>: sync go.mod from kopia source
oadp-maintainers Jul 2, 2026
90438f1
UPSTREAM: <drop>: Updating go modules
oadp-maintainers Jul 2, 2026
43fb8de
Merge pull request #32 from oadp-rebasebot/rebase-bot-oadp-1.6
openshift-merge-bot[bot] Jul 2, 2026
529c6ec
Remove inactive users from OWNERS
redhat-chai-bot Jul 31, 2026
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
2 changes: 2 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,5 @@ jobs:
go-version-file: 'go.mod'
- name: Lint
run: make lint
- name: Check Locks
run: make check-locks
94 changes: 94 additions & 0 deletions .github/workflows/quay_binaries_push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Push binaries to Quay.io on pushes to oadp-* branches
name: Multi-Arch Binary Push to Quay.io

on:
push:
branches:
- 'oadp-*'
pull_request:
branches:
- 'oadp-*'

env:
IMAGE_REPO: quay.io/konveyor/oadp-vmdp-binaries

jobs:

multi-arch-build:
name: Build Multi-Arch Images
runs-on: ubuntu-latest
strategy:
matrix:
arch: [amd64, arm64]
steps:

- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Build Image for ${{ matrix.arch }}
id: build_image
uses: redhat-actions/buildah-build@v2
with:
image: oadp-vmdp-binaries-local
tags: ${{ matrix.arch }}
archs: ${{ matrix.arch }}
build-args: |
TARGETOS=linux
TARGETARCH=${{ matrix.arch }}
containerfiles: |
./Containerfile.download

- name: Save image as tar
run: |
buildah push ${{ steps.build_image.outputs.image-with-tag }} oci-archive:oadp-vmdp-${{ matrix.arch }}.tar

- name: Upload image artifact
uses: actions/upload-artifact@v4
with:
name: oadp-vmdp-image-${{ matrix.arch }}
path: oadp-vmdp-${{ matrix.arch }}.tar
retention-days: 1

push-manifest:
name: Create and Push Multi-Arch Manifest
runs-on: ubuntu-latest
needs: multi-arch-build
if: github.event_name == 'push'
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
pattern: oadp-vmdp-image-*

- name: Buildah login
run: buildah login -u ${{ secrets.QUAY_USER }} -p ${{ secrets.QUAY_TOKEN }} quay.io

- name: Load images and tag archs
run: |
AMD64_ID=$(buildah pull oci-archive:oadp-vmdp-image-amd64/oadp-vmdp-amd64.tar)
ARM64_ID=$(buildah pull oci-archive:oadp-vmdp-image-arm64/oadp-vmdp-arm64.tar)

buildah tag $AMD64_ID ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-amd64
buildah tag $ARM64_ID ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-arm64

- name: Create and push multi-arch manifest (version tag)
if: github.ref_name != 'oadp-dev'
run: |
buildah manifest create ${{ env.IMAGE_REPO }}:${{ github.ref_name }}
buildah manifest add ${{ env.IMAGE_REPO }}:${{ github.ref_name }} ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-amd64
buildah manifest add ${{ env.IMAGE_REPO }}:${{ github.ref_name }} ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-arm64
buildah manifest push --all ${{ env.IMAGE_REPO }}:${{ github.ref_name }}

- name: Create and push multi-arch manifest (latest tag)
if: github.ref_name == 'oadp-dev'
run: |
buildah manifest create ${{ env.IMAGE_REPO }}:latest
buildah manifest add ${{ env.IMAGE_REPO }}:latest ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-amd64
buildah manifest add ${{ env.IMAGE_REPO }}:latest ${{ env.IMAGE_REPO }}:${{ github.ref_name }}-arm64
buildah manifest push --all ${{ env.IMAGE_REPO }}:latest
73 changes: 73 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,79 @@ linters:
exclusions:
generated: lax
rules:
# OADP: Exclude unused code from commands not included in oadp-vmdp CLI
# These commands are intentionally not wired up in the CLI but kept for easier rebasing
# Prefer broad regex patterns over per-file lists to reduce rebase churn.
- path: cli/command_(acl|benchmark|maintenance|mount|notification|policy|server|user).*\.go
linters:
- unused
- path: cli/command_(diff|ls)\.go
linters:
- unused
- path: cli/command_repository_(connect_from_config|repair|set_client|set_parameters|sync|throttle|upgrade|validate_provider)\.go
linters:
- unused
- path: cli/command_repository_throttle.*\.go
linters:
- unused
- path: cli/command_snapshot_(copy_move_history|estimate|expire|fix|migrate|pin|verify).*\.go
linters:
- unused
- path: cli/storage_(azure|b2|gcs|gdrive|rclone|sftp|webdav)\.go
linters:
- unused
- path: cli/throttle_(get|set)\.go
linters:
- unused
- path: cli/sighup_unix\.go
linters:
- unused
- path: cli/show_utils\.go
text: "(indentMultilineString|maybeHumanReadableCount|formatTimestampPrecise) is unused"
linters:
- unused
- path: cli/config\.go
text: "isWindows is unused"
linters:
- unused
# OADP: Exclude unused helper functions and command trees that are intentionally not wired up
# (kept in-tree to simplify rebases).
- path: cli/app\.go
text: "func safetyFlagVar is unused"
linters:
- unused
- path: cli/command_blob.*\.go
linters:
- unused
- path: cli/command_content.*\.go
linters:
- unused
- path: cli/command_index.*\.go
linters:
- unused
- path: cli/command_manifest.*\.go
linters:
- unused
# OADP: Exclude unused fields in structs for commands not wired up
- path: cli/app\.go
text: "field (benchmark|diff|list|server|policy|mount|maintenance|notification|blob|content|index|manifest) is unused"
linters:
- unused
- path: cli/command_repository\.go
text: "field (repair|setClient|setParameters|syncTo|throttle|validateProvider|upgrade) is unused"
linters:
- unused
- path: cli/command_snapshot\.go
text: "field (copyHistory|moveHistory|estimate|expire|fix|migrate|pin|verify) is unused"
linters:
- unused
# OADP: Exclude revive unused-parameter warning for azure/patch.go
- path: repo/blob/azure/patch\.go
linters:
- revive
- path: reporter.go
linters:
- musttag
- path: _test\.go|testing|tests|test_env|fshasher|fault
linters:
- contextcheck
Expand Down
123 changes: 123 additions & 0 deletions Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Copyright 2025 Red Hat Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# 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.

# ==============================================================================
# OADP VM Data Protection - Multi-Architecture Container Build
# ==============================================================================
#
# This Containerfile builds a statically-linked oadp-vmdp CLI binary for Linux
# and packages it in a minimal UBI container image.
#
# Supported architectures:
# - linux/amd64 (x86_64)
# - linux/arm64 (aarch64)
#
# Usage with Docker:
# docker buildx build --platform linux/amd64,linux/arm64 -t oadp-vmdp .
#
# Usage with Podman:
# podman build --arch amd64 -t oadp-vmdp:amd64 .
# podman build --arch arm64 -t oadp-vmdp:arm64 .
# podman build --arch amd64 \
# --build-arg VERSION=1.0.0 \
# --build-arg GIT_COMMIT=5eaa13d1 \
# --build-arg BUILD_DATE=2025-12-15T00:00:00Z \
# --build-arg BUILDTAGS=oadp \
# -t oadp-vmdp:amd64 .
#

# ==============================================================================
# Build Stage - Compile the Go binary
# ==============================================================================

FROM --platform=$BUILDPLATFORM golang:1.25-alpine AS builder

# Build arguments for cross-compilation
ARG BUILDPLATFORM
ARG TARGETPLATFORM
ARG TARGETOS=linux
ARG TARGETARCH

# Version information (passed from Makefile.ubi)
ARG VERSION=dev
ARG GIT_COMMIT=unknown
ARG BUILD_DATE=unknown
ARG BUILDTAGS=

# Install git for version detection (if not passed via args)
RUN apk add --no-cache git

WORKDIR /build

# Copy Go module files first for better layer caching
COPY go.mod go.sum ./
RUN go mod download

# Copy source code
COPY . .

# Build the binary with static linking
# CGO_ENABLED=0 ensures a fully static binary that works on any Linux distro
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg/mod \
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go build \
-trimpath \
-mod=mod \
-tags="${BUILDTAGS}" \
-ldflags="-s -w \
-X github.com/kopia/kopia/repo.BuildVersion=${VERSION} \
-X github.com/kopia/kopia/repo.BuildInfo=${BUILD_DATE}-${GIT_COMMIT} \
-X github.com/kopia/kopia/repo.BuildGitHubRepo=github.com/openshift/oadp-vmdp" \
-o /build/oadp-vmdp \
.

# ==============================================================================
# Runtime Stage - Minimal container with just the binary
# ==============================================================================

FROM registry.access.redhat.com/ubi9-minimal:latest

# Version information (re-declared for this stage so LABEL can use them)
# NOTE: ARG scope does not automatically carry across FROM boundaries.
ARG VERSION=dev
ARG GIT_COMMIT=unknown
ARG BUILD_DATE=unknown
ARG BUILDTAGS=

# Labels for container metadata
LABEL name="oadp-vmdp" \
vendor="Red Hat, Inc." \
version="${VERSION}" \
summary="OADP VM Data Protection CLI" \
description="Virtual Machine Data Protection tool for OpenShift Virtualization backup and restore operations" \
io.k8s.display-name="OADP VM Data Protection" \
io.k8s.description="CLI tool for VM data protection in OpenShift Virtualization" \
io.openshift.tags="oadp,backup,restore,virtualization"

# Create cache directory for the application
# This is needed by kopia/oadp-vmdp for caching operations
WORKDIR /

RUN mkdir -p /.cache && \
chown 65532:65532 /.cache

# Copy the binary from builder stage
COPY --from=builder /build/oadp-vmdp /oadp-vmdp

# Run as non-root user for security
USER 65532:65532

# Set the entrypoint
ENTRYPOINT ["/oadp-vmdp"]
Loading
Loading