1+ name : Build and Push AWS Karpenter Provider Image
2+
3+ on :
4+ workflow_dispatch :
5+ push :
6+ branches :
7+ - main
8+ - release-*
9+
10+ jobs :
11+ build :
12+ runs-on : ubuntu-latest
13+
14+ env :
15+ KO_DOCKER_REPO : docker.io/inftyai/aws-karpenter
16+
17+ steps :
18+ - name : Checkout forked karpenter
19+ uses : actions/checkout@v4
20+
21+ - name : Set up Go 1.24
22+ uses : actions/setup-go@v5
23+ with :
24+ go-version : " 1.24"
25+
26+ - name : Generate commit info and image tag
27+ id : tag
28+ run : |
29+ BRANCH="${GITHUB_REF##*/}"
30+ COMMIT=$(git rev-parse HEAD)
31+ TIMESTAMP=$(git show -s --format=%ct $COMMIT)
32+ VERSION_DATE=$(date -u -d "@$TIMESTAMP" +'%Y%m%d%H%M%S')
33+ PSEUDO_VERSION="v0.0.0-${VERSION_DATE}-${COMMIT:0:12}"
34+
35+ if [[ "$BRANCH" == "main" ]]; then
36+ TAG="latest"
37+ IMAGE_TAG="latest"
38+ elif [[ "$BRANCH" == release-* ]]; then
39+ TAG="${BRANCH#release-}" # e.g. v0.36.2
40+ IMAGE_TAG="${TAG#v}" # e.g. 0.36.2
41+ else
42+ TAG="fork-${PSEUDO_VERSION}"
43+ IMAGE_TAG="${TAG}" # keep full tag
44+ fi
45+
46+ echo "commit=$COMMIT" >> $GITHUB_OUTPUT
47+ echo "version=$PSEUDO_VERSION" >> $GITHUB_OUTPUT
48+ echo "tag=$TAG" >> $GITHUB_OUTPUT
49+ echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT
50+ echo "✅ Using image tag: $IMAGE_TAG"
51+
52+ - name : Clone karpenter-provider-aws
53+ run : |
54+ git clone https://github.com/aws/karpenter-provider-aws.git aws-provider
55+ cd aws-provider
56+
57+ TAG="${{ steps.tag.outputs.tag }}"
58+ if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
59+ echo "🔄 Attempting to checkout provider tag: $TAG"
60+ if git rev-parse "refs/tags/$TAG" >/dev/null 2>&1; then
61+ git checkout "tags/$TAG" -b "build-from-tag-$TAG"
62+ else
63+ echo "❌ Tag '$TAG' not found in karpenter-provider-aws repo."
64+ exit 1
65+ fi
66+ else
67+ echo "🔄 Checking out provider branch: main"
68+ git checkout main
69+ fi
70+
71+ - name : Replace karpenter module with forked commit version
72+ run : |
73+ cd aws-provider
74+ go mod edit -replace sigs.k8s.io/karpenter=github.com/InftyAI/karpenter@${{ steps.tag.outputs.version }}
75+ go mod tidy
76+
77+ - name : Install build tools via make toolchain
78+ run : |
79+ cd aws-provider
80+ make toolchain
81+
82+ - name : Login to DockerHub
83+ uses : docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
84+ with :
85+ username : ${{ secrets.DOCKERHUB_USERNAME }}
86+ password : ${{ secrets.DOCKERHUB_TOKEN }}
87+
88+ - name : Build and push image using ko
89+ run : |
90+ cd aws-provider
91+ ko build --bare \
92+ --tags ${{ steps.tag.outputs.image_tag }} \
93+ github.com/aws/karpenter-provider-aws/cmd/controller
94+
95+ - name : Show pushed image
96+ run : |
97+ echo "✅ Image pushed to:"
98+ echo "docker.io/carlory/aws-karpenter/controller:${{ steps.tag.outputs.image_tag }}"
0 commit comments