forked from migtools/oadp-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
200 lines (172 loc) · 7.27 KB
/
release.yml
File metadata and controls
200 lines (172 loc) · 7.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
cache: false
- name: Clean Go environment
run: |
echo "Cleaning Go environment for fresh build..."
go clean -cache -modcache -i -r || true
echo "Go environment cleaned"
- name: Download dependencies
run: |
echo "Downloading fresh dependencies..."
go mod download
go mod verify
echo "Dependencies ready"
- name: Build all architectures
run: |
set -e
echo "Building all architectures for release ${{ github.ref_name }}..."
if ! make release-build VERSION="${{ github.ref_name }}"; then
echo "❌ Build failed"
exit 1
fi
echo "✅ All builds 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
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 }}
Cross-platform kubectl plugin for managing OpenShift API for Data Protection (OADP) backup and restore operations.
### Installation
#### Via krew (recommended)
```bash
kubectl krew install oadp
```
#### Via krew manifest (for testing or custom indexes)
```bash
curl -LO https://github.com/migtools/oadp-cli/releases/download/${{ github.ref_name }}/oadp.yaml
kubectl krew install --manifest=oadp.yaml
```
#### Manual installation
1. Download the appropriate binary for your platform
2. Extract the archive
3. Add the binary to your PATH
4. Verify installation: `kubectl oadp --help`
### Supported Platforms
- Linux (amd64, arm64, ppc64le, s390x)
- macOS (amd64, arm64)
- Windows (amd64, arm64)
### 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.
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Skip this step if it is not a clean semver: eg if it has -beta, or any other suffix, do not run
- name: Update new version in krew-index
if: ${{!contains(github.ref_name, '-') && !contains(github.ref_name, '+')}}
uses: rajatjindal/krew-release-bot@v0.0.46