Skip to content

2.23.0

2.23.0 #222

Workflow file for this run

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: 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"
docker commit --change='ENTRYPOINT ["/cnb/process/web"]' --change='USER cnb' $(docker ps -lq) executortemp
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