2.24.0-beta.5 #236
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release Terrakube | |
on: | |
release: | |
types: [created] | |
jobs: | |
build: | |
strategy: | |
matrix: | |
os: [jammy, jammy-arm, alpaquita] | |
env: | |
VERSION: ${{ github.event.release.tag_name }} | |
runs-on: ${{ matrix.os == 'jammy-arm' && 'ARM64' || 'ubuntu-latest' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Cache Maven packages | |
uses: actions/cache@v3 | |
with: | |
path: ~/.m2 | |
key: ${{ runner.os }}-m2-${{ hashFiles('pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-m2 | |
- name: Set up JDK 22 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '22' | |
distribution: 'liberica' | |
- name: Set up Docker config | |
run: | | |
mkdir -p ~/.docker | |
echo '{"auths":{"https://index.docker.io/v1/":{"auth":"'$(echo -n "${{ secrets.DOCKER_USER }}:${{ secrets.DOCKER_PASSWORD }}" | base64 )'"}}}' > ~/.docker/config.json | |
- name: Set environment label for Alpaquita | |
if: matrix.os == 'alpaquita' | |
run: echo "VERSION=${{ env.VERSION }}-alpaquita" >> $GITHUB_ENV | |
- name: Set environment label for Jammy-ARM | |
if: matrix.os == 'jammy-arm' | |
run: echo "VERSION=${{ env.VERSION }}-arm" >> $GITHUB_ENV | |
- name: Build and Push UI Images | |
if: matrix.os == 'jammy' || matrix.os == 'jammy-arm' | |
working-directory: ./ui | |
run: | | |
docker build --build-arg REACT_APP_TERRAKUBE_VERSION=v${{ env.VERSION }} -t azbuilder/terrakube-ui:${{ env.VERSION }} --push . | |
- name: Update POM Version | |
run: mvn versions:set-property -Dproperty=revision -DnewVersion=${{ env.VERSION }} -DgenerateBackupPoms=false | |
- name: Build Image with Maven | |
run: | | |
if [ "${{ matrix.os }}" == "alpaquita" ]; then | |
mvn -pl "api,registry,executor" spring-boot:build-image -B --file pom.xml -Dmaven.test.skip=true -Dbuildpack.builder=bellsoft/buildpacks.builder:glibc | |
elif [ "${{ matrix.os }}" == "jammy-arm" ]; then | |
mvn -pl "api,registry,executor" spring-boot:build-image -B --file pom.xml -Dmaven.test.skip=true -Dbuildpack.builder=heroku/builder:24 | |
else | |
mvn -pl "api,registry,executor" spring-boot:build-image -B --file pom.xml -Dmaven.test.skip=true | |
fi | |
env: | |
USER_NAME: ${{ secrets.USER_NAME }} | |
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} | |
- name: Tag and Push Executor Images | |
run: | | |
IMAGE_ID=$(docker images executor:${{ env.VERSION }} -q) | |
# Install Git | |
if [ "${{ matrix.os }}" == "alpaquita" ]; then | |
docker tag $IMAGE_ID executortemp | |
else | |
docker run --user="root" --entrypoint launcher $IMAGE_ID "apt-get update && apt-get install git jq curl -y" | |
if [ "${{ matrix.os }}" == "jammy-arm" ]; then | |
docker commit --change='ENTRYPOINT ["/cnb/process/web"]' --change='USER heroku' $(docker ps -lq) executortemp | |
else | |
docker commit --change='ENTRYPOINT ["/cnb/process/web"]' --change='USER cnb' $(docker ps -lq) executortemp | |
fi | |
fi | |
IMAGE_ID=$(docker images executortemp -q) | |
docker tag $IMAGE_ID azbuilder/executor:${{ env.VERSION }} | |
docker tag $IMAGE_ID azbuilder/executor:latest | |
docker push azbuilder/executor:${{ env.VERSION }} | |
- name: Tag and Push API Images | |
run: | | |
IMAGE_ID=$(docker images api-server:${{ env.VERSION }} -q) | |
docker tag $IMAGE_ID azbuilder/api-server:${{ env.VERSION }} | |
docker tag $IMAGE_ID azbuilder/api-server:latest | |
docker push azbuilder/api-server:${{ env.VERSION }} | |
- name: Tag and Push Registry Images | |
run: | | |
IMAGE_ID=$(docker images open-registry:${{ env.VERSION }} -q) | |
docker tag $IMAGE_ID azbuilder/open-registry:${{ env.VERSION }} | |
docker tag $IMAGE_ID azbuilder/open-registry:latest | |
docker push azbuilder/open-registry:${{ env.VERSION }} | |
merge: | |
needs: build | |
runs-on: ubuntu-latest | |
env: | |
VERSION: ${{ github.event.release.tag_name }} | |
steps: | |
- name: Set up Docker config | |
run: | | |
mkdir -p ~/.docker | |
echo '{"auths":{"https://index.docker.io/v1/":{"auth":"'$(echo -n "${{ secrets.DOCKER_USER }}:${{ secrets.DOCKER_PASSWORD }}" | base64 )'"}}}' > ~/.docker/config.json | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Create and Push Multi-Platform Images | |
run: | | |
# API | |
docker buildx imagetools create \ | |
--tag azbuilder/api-server:${{ env.VERSION }} \ | |
--tag azbuilder/api-server:latest \ | |
azbuilder/api-server:${{ env.VERSION }} \ | |
azbuilder/api-server:${{ env.VERSION }}-arm | |
# Registry | |
docker buildx imagetools create \ | |
--tag azbuilder/open-registry:${{ env.VERSION }} \ | |
--tag azbuilder/open-registry:latest \ | |
azbuilder/open-registry:${{ env.VERSION }} \ | |
azbuilder/open-registry:${{ env.VERSION }}-arm | |
# Executor | |
docker buildx imagetools create \ | |
--tag azbuilder/executor:${{ env.VERSION }} \ | |
--tag azbuilder/executor:latest \ | |
azbuilder/executor:${{ env.VERSION }} \ | |
azbuilder/executor:${{ env.VERSION }}-arm | |
# UI | |
docker buildx imagetools create \ | |
--tag azbuilder/terrakube-ui:${{ env.VERSION }} \ | |
--tag azbuilder/terrakube-ui:latest \ | |
azbuilder/terrakube-ui:${{ env.VERSION }} \ | |
azbuilder/terrakube-ui:${{ env.VERSION }}-arm | |
- name: Delete ARM Images | |
run: | | |
USERNAME="${{ secrets.DOCKER_USER }}" | |
PASSWORD="${{ secrets.DOCKER_PASSWORD }}" | |
ORGANIZATION="azbuilder" | |
IMAGES=("api-server" "open-registry" "executor" "terrakube-ui") | |
TAG="${{ env.VERSION }}-arm" | |
login_data() { | |
cat <<EOF | |
{ | |
"username": "$USERNAME", | |
"password": "$PASSWORD" | |
} | |
EOF | |
} | |
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "$(login_data)" "https://hub.docker.com/v2/users/login/" | jq -r .token) | |
for IMAGE in "${IMAGES[@]}"; do | |
DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "https://hub.docker.com/v2/repositories/${ORGANIZATION}/${IMAGE}/tags/${TAG}/" \ | |
-X DELETE \ | |
-H "Authorization: JWT ${TOKEN}") | |
if [ "$DELETE_RESPONSE" -eq 204 ]; then | |
echo "Successfully deleted ${ORGANIZATION}/${IMAGE}:${TAG} from Docker Hub." | |
else | |
echo "Failed to delete ${ORGANIZATION}/${IMAGE}:${TAG}. HTTP status code: $DELETE_RESPONSE" | |
fi | |
done |