From 7c87b749b8566d52766284ce478a722a457ac82b Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 1 Nov 2025 11:54:54 -0400 Subject: [PATCH 1/3] Flesh out autocomplete Signed-off-by: Joseph --- .github/workflows/cross-arch-build-test.yml | 2 +- COMPLETION.md | 77 +++++++++++++-------- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/.github/workflows/cross-arch-build-test.yml b/.github/workflows/cross-arch-build-test.yml index d273758..9752a92 100644 --- a/.github/workflows/cross-arch-build-test.yml +++ b/.github/workflows/cross-arch-build-test.yml @@ -215,7 +215,7 @@ jobs: fail-fast: false matrix: include: - - os: macos-13 # Intel + - os: macos-15-intel # Intel arch: amd64 binary: kubectl-oadp_${{ needs.build-all.outputs.suffix }}darwin_amd64 - os: macos-latest # Apple Silicon diff --git a/COMPLETION.md b/COMPLETION.md index 568e0b6..1a90757 100644 --- a/COMPLETION.md +++ b/COMPLETION.md @@ -75,13 +75,16 @@ Create the wrapper script in the same directory as your `kubectl-oadp` binary: #### For kubectl plugin completion: ```bash -# If kubectl-oadp is in ~/.local/bin (most common) -cat > ~/.local/bin/kubectl_complete-oadp << 'EOF' +# Auto-detect kubectl-oadp location and create wrapper +OADP_PATH=$(which kubectl-oadp) +OADP_DIR=$(dirname "$OADP_PATH") + +cat > "${OADP_DIR}/kubectl_complete-oadp" << EOF #!/bin/bash # Wrapper script for kubectl plugin completion -exec ~/.local/bin/kubectl-oadp __complete "$@" +exec ${OADP_PATH} __complete "\$@" EOF -chmod +x ~/.local/bin/kubectl_complete-oadp +chmod +x "${OADP_DIR}/kubectl_complete-oadp" ``` #### For oc plugin completion: @@ -89,19 +92,18 @@ chmod +x ~/.local/bin/kubectl_complete-oadp If you also want `oc oadp` completion (using the same binary as an oc plugin): ```bash -# Create oc completion wrapper -cat > ~/.local/bin/oc_complete-oadp << 'EOF' +# Create oc completion wrapper (uses same auto-detected path) +OADP_PATH=$(which kubectl-oadp) +OADP_DIR=$(dirname "$OADP_PATH") + +cat > "${OADP_DIR}/oc_complete-oadp" << EOF #!/bin/bash # Wrapper script for oc plugin completion -exec ~/.local/bin/kubectl-oadp __complete "$@" +exec ${OADP_PATH} __complete "\$@" EOF -chmod +x ~/.local/bin/oc_complete-oadp +chmod +x "${OADP_DIR}/oc_complete-oadp" ``` -**For other locations:** -- If using `~/bin`: Replace `~/.local/bin` with `~/bin` -- If using `/usr/local/bin`: Replace `~/.local/bin` with `/usr/local/bin` - ### 2. Configure Your Shell Add completion configuration to your shell's rc file: @@ -109,8 +111,8 @@ Add completion configuration to your shell's rc file: **For zsh** (add to `~/.zshrc`): ```bash # kubectl-oadp completion -if [ -f "$HOME/.local/bin/kubectl-oadp" ]; then - source <($HOME/.local/bin/kubectl-oadp completion zsh) +if command -v kubectl-oadp >/dev/null 2>&1; then + source <(kubectl-oadp completion zsh) compdef _oadp kubectl-oadp fi ``` @@ -118,8 +120,16 @@ fi **For bash** (add to `~/.bashrc`): ```bash # kubectl-oadp completion -if [ -f "$HOME/.local/bin/kubectl-oadp" ]; then - source <($HOME/.local/bin/kubectl-oadp completion bash) +if command -v kubectl-oadp >/dev/null 2>&1; then + source <(kubectl-oadp completion bash) +fi +``` + +**Note for minimal environments (containers, etc.):** If you get `_get_comp_words_by_ref: command not found` errors, the bash-completion framework needs to be loaded first. Add this before the kubectl-oadp completion: +```bash +# Load bash-completion framework (if not auto-loaded) +if [ -f /usr/share/bash-completion/bash_completion ] && ! type _get_comp_words_by_ref >/dev/null 2>&1; then + source /usr/share/bash-completion/bash_completion fi ``` @@ -157,12 +167,14 @@ You should see available commands like `backup`, `nonadmin`, `nabsl`, etc. **Check if wrapper exists:** ```bash -ls -la ~/.local/bin/kubectl_complete-oadp +# Find where kubectl-oadp is installed +OADP_DIR=$(dirname $(which kubectl-oadp)) +ls -la "${OADP_DIR}/kubectl_complete-oadp" ``` **Check if it's executable:** ```bash -chmod +x ~/.local/bin/kubectl_complete-oadp +chmod +x "${OADP_DIR}/kubectl_complete-oadp" ``` **Test wrapper directly:** @@ -176,28 +188,30 @@ kubectl_complete-oadp __complete kubectl oadp grep -A5 "kubectl-oadp completion" ~/.zshrc # For bash -grep -A3 "kubectl-oadp completion" ~/.bashrc +grep -A5 "kubectl-oadp completion" ~/.bashrc ``` ### Path Issues? Make sure both files are in the same directory and that directory is in your PATH: ```bash -echo $PATH | grep -o '[^:]*\.local/bin[^:]*' which kubectl-oadp which kubectl_complete-oadp which oc_complete-oadp # if using oc completion + +# Check if the directory is in PATH +OADP_DIR=$(dirname $(which kubectl-oadp)) +echo $PATH | grep -q "$OADP_DIR" && echo "✓ In PATH" || echo "✗ Not in PATH" ``` ## Uninstalling Completion ### Remove the Wrapper Scripts ```bash -# Remove kubectl completion wrapper -rm ~/.local/bin/kubectl_complete-oadp - -# Remove oc completion wrapper (if created) -rm ~/.local/bin/oc_complete-oadp +# Find and remove the wrapper scripts +OADP_DIR=$(dirname $(which kubectl-oadp)) +rm "${OADP_DIR}/kubectl_complete-oadp" +rm "${OADP_DIR}/oc_complete-oadp" # if you created this ``` ### Remove Shell Configuration @@ -214,19 +228,26 @@ rm ~/.local/bin/oc_complete-oadp ## Advanced: Custom Locations -If your `kubectl-oadp` binary is in a non-standard location, update the wrapper script paths: +If your `kubectl-oadp` binary is in a non-standard location, the dynamic detection will automatically handle it as long as the binary is in your `$PATH`. If it's not in your PATH, you can either: + +1. **Add it to PATH** (recommended): +```bash +export PATH="/opt/oadp/bin:$PATH" +# Then use the standard setup commands above +``` +2. **Use explicit paths**: ```bash # Example for custom location /opt/oadp/bin cat > /opt/oadp/bin/kubectl_complete-oadp << 'EOF' #!/bin/bash exec /opt/oadp/bin/kubectl-oadp __complete "$@" EOF +chmod +x /opt/oadp/bin/kubectl_complete-oadp # Update shell config accordingly if [ -f "/opt/oadp/bin/kubectl-oadp" ]; then - source <(/opt/oadp/bin/kubectl-oadp completion zsh) - compdef _oadp kubectl-oadp + source Date: Mon, 3 Nov 2025 10:29:50 -0500 Subject: [PATCH 2/3] binary name fix and use release-archives Signed-off-by: Joseph --- Containerfile.download | 11 ++--------- Makefile | 43 +++++++++++++++++------------------------- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/Containerfile.download b/Containerfile.download index 2e8428c..d277718 100644 --- a/Containerfile.download +++ b/Containerfile.download @@ -13,18 +13,11 @@ RUN go mod download && go mod verify COPY . . -# Build ALL kubectl-oadp binaries using native Go cross-compilation (no QEMU emulation) -# The download server needs to serve binaries for all platforms, not just one arch -RUN make release-build && \ +RUN make release-archives && \ mkdir -p /archives && \ - for binary in kubectl-oadp_*; do \ - archive_name=$(echo "$binary" | sed 's/\.exe$//' ).tar.gz; \ - tar -czf "/archives/$archive_name" "$binary"; \ - echo "Created /archives/$archive_name"; \ - done + mv *.tar.gz /archives/ # Build the download server for the TARGET platform (the arch this container will run on) -# This uses cross-compilation so the builder can run natively on amd64 RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o download-server ./cmd/downloads/server.go # Clean up to reduce layer size diff --git a/Makefile b/Makefile index db2eb42..9f46620 100644 --- a/Makefile +++ b/Makefile @@ -374,8 +374,12 @@ status: ## Show build status and installation info # Optimized release targets with centralized platform logic .PHONY: release-build -release-build: ## Build binaries for all platforms - @echo "Building release binaries..." +release-build: ## Build binaries and create tar.gz archives for all platforms + @echo "Building release binaries and creating archives..." + @if [ ! -f LICENSE ]; then \ + echo "❌ LICENSE file not found! Please ensure LICENSE file exists."; \ + exit 1; \ + fi @for platform in $(PLATFORMS); do \ GOOS=$$(echo $$platform | cut -d'/' -f1); \ GOARCH=$$(echo $$platform | cut -d'/' -f2); \ @@ -384,40 +388,27 @@ release-build: ## Build binaries for all platforms else \ binary_name="$(BINARY_NAME)"; \ fi; \ + archive_name="$(BINARY_NAME)_$(VERSION)_$${GOOS}_$${GOARCH}.tar.gz"; \ echo "Building for $$GOOS/$$GOARCH..."; \ GOOS=$$GOOS GOARCH=$$GOARCH go build -o $$binary_name .; \ - if [ -n "$(VERSION)" ]; then \ - final_name="$(BINARY_NAME)_$(VERSION)_$${GOOS}_$${GOARCH}$${binary_name#$(BINARY_NAME)}"; \ - else \ - final_name="$(BINARY_NAME)_$${GOOS}_$${GOARCH}$${binary_name#$(BINARY_NAME)}"; \ - fi; \ - mv $$binary_name $$final_name; \ - echo "✅ Built $$final_name for $$GOOS/$$GOARCH"; \ + echo "Creating $$archive_name..."; \ + tar czf $$archive_name LICENSE $$binary_name; \ + rm $$binary_name; \ + echo "✅ Built and archived $$archive_name"; \ done - @echo "✅ All release binaries built successfully!" + @echo "✅ All release binaries and archives created successfully!" .PHONY: release-archives -release-archives: release-build ## Create tar.gz archives for all platforms (includes LICENSE) - @echo "Creating release archives..." - @if [ ! -f LICENSE ]; then \ - echo "❌ LICENSE file not found! Please ensure LICENSE file exists."; \ - exit 1; \ - fi +release-archives: release-build ## Create tar.gz archives with SHA256 checksums for all platforms + @echo "Generating SHA256 checksums..." @for platform in $(PLATFORMS); do \ GOOS=$$(echo $$platform | cut -d'/' -f1); \ GOARCH=$$(echo $$platform | cut -d'/' -f2); \ - if [ "$$GOOS" = "windows" ]; then \ - binary_name="$(BINARY_NAME).exe"; \ - else \ - binary_name="$(BINARY_NAME)"; \ - fi; \ - archive_name="$(BINARY_NAME)_${VERSION}_$$GOOS_$$GOARCH.tar.gz"; \ - echo "Creating $$archive_name..."; \ - tar czf $$archive_name LICENSE $(BINARY_NAME)_${VERSION}_$${GOOS}_$${GOARCH}$${binary_name#$(BINARY_NAME)}; \ + archive_name="$(BINARY_NAME)_$(VERSION)_$${GOOS}_$${GOARCH}.tar.gz"; \ sha256sum $$archive_name > $$archive_name.sha256; \ - echo "✅ Created $$archive_name with LICENSE"; \ + echo "✅ Generated checksum for $$archive_name"; \ done - @echo "✅ All release archives created successfully!" + @echo "✅ All SHA256 checksums generated!" @echo "📦 Archives created:" @ls -la *.tar.gz @echo "🔐 SHA256 checksums:" From a1ee2831c2d7605125777985c810a0d73a7b07af Mon Sep 17 00:00:00 2001 From: Joseph Date: Mon, 3 Nov 2025 11:05:16 -0500 Subject: [PATCH 3/3] Remove bloat Signed-off-by: Joseph --- .github/workflows/release.yml | 116 +++---------------------------- Makefile | 51 ++++++++++---- oadp.yaml | 124 ---------------------------------- 3 files changed, 47 insertions(+), 244 deletions(-) delete mode 100644 oadp.yaml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b37144..3a0867a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,126 +33,28 @@ jobs: go mod verify echo "Dependencies ready" - - name: Build all architectures + - name: Build release archives with checksums run: | set -e - echo "Building all architectures for release ${{ github.ref_name }}..." - if ! make release-build VERSION="${{ github.ref_name }}"; then - echo "❌ Build failed" + echo "Building release binaries and archives for ${{ github.ref_name }}..." + if ! make release-archives VERSION="${{ github.ref_name }}"; then + echo "❌ Build or archive creation failed" exit 1 fi - echo "✅ All builds completed" + echo "✅ All builds and archives completed" - - name: Create release archives - run: | - set -e - echo "Creating release archives..." - - # Define the platforms we want for krew (must match oadp.yaml) - declare -a platforms=( - "linux_amd64" - "linux_arm64" - "linux_ppc64le" - "linux_s390x" - "darwin_amd64" - "darwin_arm64" - "windows_amd64" - "windows_arm64" - ) - - # Create archives only for krew platforms - for platform in "${platforms[@]}"; do - if [[ "$platform" == *"windows"* ]]; then - # Windows binaries have .exe extension - binary="kubectl-oadp_${{ github.ref_name }}_${platform}.exe" - if [[ -f "$binary" ]]; then - echo "Creating archive for $platform..." - cp "$binary" kubectl-oadp.exe - tar -czf "kubectl-oadp_${{ github.ref_name }}_${platform}.tar.gz" kubectl-oadp.exe LICENSE - rm kubectl-oadp.exe - echo "✅ Created kubectl-oadp_${{ github.ref_name }}_${platform}.tar.gz" - else - echo "❌ Binary not found: $binary" - exit 1 - fi - else - # Unix binaries (no extension) - binary="kubectl-oadp_${{ github.ref_name }}_${platform}" - if [[ -f "$binary" ]]; then - echo "Creating archive for $platform..." - cp "$binary" kubectl-oadp - tar -czf "kubectl-oadp_${{ github.ref_name }}_${platform}.tar.gz" kubectl-oadp LICENSE - rm kubectl-oadp - echo "✅ Created kubectl-oadp_${{ github.ref_name }}_${platform}.tar.gz" - else - echo "❌ Binary not found: $binary" - exit 1 - fi - fi - done - - echo "" - echo "Release archives created:" - ls -la *.tar.gz - - - name: Generate SHA256 checksums - run: | - set -e - echo "Generating SHA256 checksums..." - sha256sum *.tar.gz > checksums.txt + # Create consolidated checksums file for release + cat *.tar.gz.sha256 > checksums.txt echo "" echo "Checksums:" cat checksums.txt - - name: Generate final krew manifest - run: | - set -e - echo "Generating final krew manifest with version ${{ github.ref_name }}..." - - # Set environment variables for template substitution - export VERSION="${{ github.ref_name }}" - export LINUX_AMD64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_linux_amd64.tar.gz" checksums.txt | cut -d' ' -f1) - export LINUX_ARM64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_linux_arm64.tar.gz" checksums.txt | cut -d' ' -f1) - export DARWIN_AMD64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_darwin_amd64.tar.gz" checksums.txt | cut -d' ' -f1) - export DARWIN_ARM64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_darwin_arm64.tar.gz" checksums.txt | cut -d' ' -f1) - export WINDOWS_AMD64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_windows_amd64.tar.gz" checksums.txt | cut -d' ' -f1) - export WINDOWS_ARM64_SHA=$(grep "kubectl-oadp_${{ github.ref_name }}_windows_arm64.tar.gz" checksums.txt | cut -d' ' -f1) - - # Validate all checksums were found - if [[ -z "$LINUX_AMD64_SHA" || -z "$LINUX_ARM64_SHA" || -z "$DARWIN_AMD64_SHA" || -z "$DARWIN_ARM64_SHA" || -z "$WINDOWS_AMD64_SHA" || -z "$WINDOWS_ARM64_SHA" ]]; then - echo "❌ Some checksums are missing!" - echo "Available checksums:" - cat checksums.txt - exit 1 - fi - - # Use envsubst to substitute environment variables in template - # Save original template and generate final manifest - cp oadp.yaml oadp-template.yaml - envsubst < oadp-template.yaml > oadp.yaml - - echo "✅ Final krew manifest generated successfully!" - echo "" - echo "Summary:" - echo "Version: $VERSION" - echo "Linux amd64: ${LINUX_AMD64_SHA:0:16}..." - echo "Linux arm64: ${LINUX_ARM64_SHA:0:16}..." - echo "Darwin amd64: ${DARWIN_AMD64_SHA:0:16}..." - echo "Darwin arm64: ${DARWIN_ARM64_SHA:0:16}..." - echo "Windows amd64: ${WINDOWS_AMD64_SHA:0:16}..." - echo "Windows arm64: ${WINDOWS_ARM64_SHA:0:16}..." - - echo "" - echo "Final manifest preview:" - grep -E "(version:|sha256:)" oadp.yaml - - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: files: | *.tar.gz checksums.txt - oadp.yaml body: | ## OADP CLI ${{ github.ref_name }} @@ -185,10 +87,10 @@ jobs: ### Files Included - **Binary archives**: Platform-specific kubectl-oadp binaries with LICENSE - **checksums.txt**: SHA256 checksums for all binaries - - **oadp.yaml**: Final krew plugin manifest with populated SHA256 values (ready for krew index) ### For Krew Index Maintainers - The `oadp.yaml` file contains the complete krew plugin manifest with all SHA256 checksums populated and can be used directly for krew index submissions. + - On creating new releases, krew-release-bot will automatically open a PR to the krew index with the new release + - Must be non-prerelease semver tag draft: false prerelease: false env: diff --git a/Makefile b/Makefile index 9f46620..e36610e 100644 --- a/Makefile +++ b/Makefile @@ -374,8 +374,30 @@ status: ## Show build status and installation info # Optimized release targets with centralized platform logic .PHONY: release-build -release-build: ## Build binaries and create tar.gz archives for all platforms - @echo "Building release binaries and creating archives..." +release-build: ## Build binaries for all platforms + @echo "Building release binaries for all platforms..." + @for platform in $(PLATFORMS); do \ + GOOS=$$(echo $$platform | cut -d'/' -f1); \ + GOARCH=$$(echo $$platform | cut -d'/' -f2); \ + if [ -n "$(VERSION)" ]; then \ + version_suffix="_$(VERSION)"; \ + else \ + version_suffix=""; \ + fi; \ + if [ "$$GOOS" = "windows" ]; then \ + output_name="$(BINARY_NAME)$${version_suffix}_$${GOOS}_$${GOARCH}.exe"; \ + else \ + output_name="$(BINARY_NAME)$${version_suffix}_$${GOOS}_$${GOARCH}"; \ + fi; \ + echo "Building $$output_name..."; \ + GOOS=$$GOOS GOARCH=$$GOARCH go build -o $$output_name .; \ + echo "✅ Built $$output_name"; \ + done + @echo "✅ All release binaries created successfully!" + +.PHONY: release-archives +release-archives: release-build ## Create tar.gz archives with SHA256 checksums for all platforms + @echo "Creating tar.gz archives with simple binary names..." @if [ ! -f LICENSE ]; then \ echo "❌ LICENSE file not found! Please ensure LICENSE file exists."; \ exit 1; \ @@ -383,23 +405,26 @@ release-build: ## Build binaries and create tar.gz archives for all platforms @for platform in $(PLATFORMS); do \ GOOS=$$(echo $$platform | cut -d'/' -f1); \ GOARCH=$$(echo $$platform | cut -d'/' -f2); \ + if [ -n "$(VERSION)" ]; then \ + version_suffix="_$(VERSION)"; \ + else \ + version_suffix=""; \ + fi; \ if [ "$$GOOS" = "windows" ]; then \ - binary_name="$(BINARY_NAME).exe"; \ + platform_binary="$(BINARY_NAME)$${version_suffix}_$${GOOS}_$${GOARCH}.exe"; \ + simple_binary="$(BINARY_NAME).exe"; \ else \ - binary_name="$(BINARY_NAME)"; \ + platform_binary="$(BINARY_NAME)$${version_suffix}_$${GOOS}_$${GOARCH}"; \ + simple_binary="$(BINARY_NAME)"; \ fi; \ archive_name="$(BINARY_NAME)_$(VERSION)_$${GOOS}_$${GOARCH}.tar.gz"; \ - echo "Building for $$GOOS/$$GOARCH..."; \ - GOOS=$$GOOS GOARCH=$$GOARCH go build -o $$binary_name .; \ echo "Creating $$archive_name..."; \ - tar czf $$archive_name LICENSE $$binary_name; \ - rm $$binary_name; \ - echo "✅ Built and archived $$archive_name"; \ + cp $$platform_binary $$simple_binary; \ + tar czf $$archive_name LICENSE $$simple_binary; \ + rm $$simple_binary; \ + echo "✅ Created $$archive_name"; \ done - @echo "✅ All release binaries and archives created successfully!" - -.PHONY: release-archives -release-archives: release-build ## Create tar.gz archives with SHA256 checksums for all platforms + @echo "" @echo "Generating SHA256 checksums..." @for platform in $(PLATFORMS); do \ GOOS=$$(echo $$platform | cut -d'/' -f1); \ diff --git a/oadp.yaml b/oadp.yaml deleted file mode 100644 index 180488b..0000000 --- a/oadp.yaml +++ /dev/null @@ -1,124 +0,0 @@ -apiVersion: krew.googlecontainertools.github.com/v1alpha2 -kind: Plugin -metadata: - name: oadp -spec: - version: ${VERSION} - homepage: https://github.com/migtools/oadp-cli - shortDescription: CLI for OpenShift API for Data Protection (OADP) - description: | - kubectl-oadp is a kubectl plugin for managing OpenShift API for Data Protection (OADP) backup and restore operations. - - It provides both admin and non-admin commands: - - Admin commands: Full OADP/Velero backup and restore operations - - Non-admin commands: Namespace-scoped backup operations with automatic namespace detection - - The plugin automatically detects the appropriate namespace from your current kubectl context - for non-admin operations, following the principle of least privilege. - - Features: - - Create and manage OADP backups - - View backup status and logs - - Delete backups - - Support for both cluster-admin and namespace-scoped operations - caveats: | - This plugin requires: - - OADP operator to be installed in the cluster - - Appropriate RBAC permissions for the operations you want to perform - platforms: - - selector: - matchLabels: - os: linux - arch: amd64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_linux_amd64.tar.gz - sha256: "${LINUX_AMD64_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: linux - arch: arm64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_linux_arm64.tar.gz - sha256: "${LINUX_ARM64_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: linux - arch: ppc64le - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_linux_ppc64le.tar.gz - sha256: "${LINUX_PPC64LE_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: linux - arch: s390x - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_linux_s390x.tar.gz - sha256: "${LINUX_S390X_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: darwin - arch: amd64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_darwin_amd64.tar.gz - sha256: "${DARWIN_AMD64_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: darwin - arch: arm64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_darwin_arm64.tar.gz - sha256: "${DARWIN_ARM64_SHA}" - files: - - from: kubectl-oadp - to: . - - from: LICENSE - to: . - bin: kubectl-oadp - - selector: - matchLabels: - os: windows - arch: amd64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_windows_amd64.tar.gz - sha256: "${WINDOWS_AMD64_SHA}" - files: - - from: kubectl-oadp.exe - to: . - - from: LICENSE - to: . - bin: kubectl-oadp.exe - - selector: - matchLabels: - os: windows - arch: arm64 - uri: https://github.com/migtools/oadp-cli/releases/download/${VERSION}/kubectl-oadp_${VERSION}_windows_arm64.tar.gz - sha256: "${WINDOWS_ARM64_SHA}" - files: - - from: kubectl-oadp.exe - to: . - - from: LICENSE - to: . - bin: kubectl-oadp.exe \ No newline at end of file