Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VEC-413 address issues found once in main #23

Merged
merged 15 commits into from
Dec 3, 2024
148 changes: 106 additions & 42 deletions .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,17 @@ on:
version:
description: 'Version to build and deploy'
required: false

is_release:
description: 'Is this a release build?'
required: false
default: false
type: boolean

env:
REPO: 'artifact.aerospike.io/ecosystem-container-dev-local'
JFROG_CLI_BUILD_NAME: 'asvec'

JFROG_CLI_LOG_LEVEL: DEBUG
JFROG_CLI_BUILD_PROJECT: 'ecosystem'
jobs:
build-and-push:
runs-on: ubuntu-latest
Expand All @@ -43,9 +49,6 @@ jobs:
- name: Login to Artifact Aerospike Docker Registry
run: |
jf docker login artifact.aerospike.io --username ${{ secrets.JFROG_USERNAME }} --password ${{ secrets.JFROG_ACCESS_TOKEN }}
# needed these to get the docker cache working
docker pull artifact.aerospike.io/ecosystem-container-dev-local/asvec:latest || true
docker push artifact.aerospike.io/ecosystem-container-dev-local/asvec:latest || true
env:
JFROG_CLI_OFFER_CONFIG: 'false'

Expand All @@ -63,82 +66,143 @@ jobs:

- name: Set Version
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ -n "${{ github.event.inputs.version }}" ]; then
VERSION_ARG="${{ github.event.inputs.version }}"
elif [ "${{ github.event_name }}" == "push" ] && [[ "${{ github.ref }}" == refs/tags/* ]]; then
VERSION_ARG="${GITHUB_REF#refs/tags/}"
# Initialize variables
VERSION_ARG=""
VERSION=""
IS_RELEASE="${{ github.event.inputs.is_release }}"

if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
# On tag push: Use the tag name as the version
VERSION="${GITHUB_REF#refs/tags/}"
elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
# On manual trigger
if [ -n "${{ github.event.inputs.version }}" ]; then
VERSION_ARG="${{ github.event.inputs.version }}"
else
# If no version input provided, default to RELEASE file
VERSION_ARG=$(cat RELEASE)
fi

if [ "${IS_RELEASE}" == 'true' ]; then
# If release checkbox is checked, use version directly
VERSION="${VERSION_ARG}"
else
# If not release, append build ID
VERSION="${VERSION_ARG}-${GITHUB_RUN_NUMBER}"
fi
else
# In all other cases: Use RELEASE file content appended with build ID
VERSION_ARG=$(cat RELEASE)
VERSION="${VERSION_ARG}-${GITHUB_RUN_NUMBER}"
fi
BUILD_ID=${GITHUB_RUN_NUMBER}
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
VERSION="${VERSION_ARG}"
else
VERSION="${VERSION_ARG}-${BUILD_ID}"
fi

echo "VERSION=${VERSION}" >> $GITHUB_ENV

- name: Build Docker Image (No Push)
if: github.event_name == 'pull_request'
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=asvec:test-${{ github.run_id }} \
--file docker/asvec.docker/bake.hcl \

env:
DOCKER_BUILDKIT: '1'

- name: Build and Push Docker Image
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
if: github.event_name == 'workflow_dispatch' || github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=${{ env.REPO }}/asvec:${{ env.VERSION }} \
--set asvec.tags=${{ env.REPO }}/asvec:${{ env.VERSION }} \
--file docker/asvec.docker/bake.hcl \
--push \
--metadata-file=build-metadata

env:
DOCKER_BUILDKIT: '1'

- name: Build and Push Docker Image with 'latest' Tag (Release)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=${{ env.REPO }}/asvec:${{ env.VERSION }} \
--set asvec.tags.1=${{ env.REPO }}/asvec:latest \
--file docker/asvec.docker/bake.hcl \
--push \
--metadata-file=build-metadata
env:
DOCKER_BUILDKIT: '1'

- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq

- name: Extract Image Name and Digest
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
run: |
jq -r '.[] | {digest: .["containerimage.digest"], names: .["image.name"] | split(",")} | "\(.names[0])@\(.digest)"' build-metadata > meta-info
jq -r '.[] | {digest: .["containerimage.digest"], names: .["image.name"] | split(",")} | "(.digest)"' build-metadata > sha
echo ${{ env.REPO }}/asvec:${{ env.VERSION }}@$(cat sha) > meta-info
echo ${{ env.REPO }}/asvec:${{ env.VERSION }}@$(cat sha) > meta-info-latest

- name: Create Docker Build Info
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))

if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
run: |

jf rt build-docker-create \
--build-name "${{ env.JFROG_CLI_BUILD_NAME }}" \
--build-name "${{ env.JFROG_CLI_BUILD_NAME }}-container" \
--build-number "${{ env.VERSION }}" \
--image-file ./meta-info \
--project ecosystem \
ecosystem-container-dev-local

- name: Publish Build Info
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
run: |
export JFROG_CLI_LOG_LEVEL=DEBUG
jf rt build-collect-env --project ecosystem "${{ env.JFROG_CLI_BUILD_NAME }}-container" "${{ env.VERSION }}"
jf rt build-add-git --project ecosystem "${{ env.JFROG_CLI_BUILD_NAME }}-container" "${{ env.VERSION }}"

jf rt build-publish \
--detailed-summary \
--project ecosystem \
"${{ env.JFROG_CLI_BUILD_NAME }}" "${{ env.VERSION }}"
"${{ env.JFROG_CLI_BUILD_NAME }}-container" "${{ env.VERSION }}"


# All of the following steps are commented out because they are just to handle "latest" tag and it is typically not desired in a release bundle
# - name: Tag a release with latest (Release)
# if: github.event_name == 'workflow_dispatch' && github.event.inputs.is_release == 'true' || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))
# run: |
# jf docker buildx imagetools create --tag ${{ env.REPO }}/asvec:latest ${{ env.REPO }}/asvec:${{ env.VERSION }}
# env:
# DOCKER_BUILDKIT: '1'

# - name: Create Docker Build Info for latest
# if: github.event_name == 'workflow_dispatch' && github.event.inputs.is_release == 'true' || (github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/')))
# run: |

# jf rt build-docker-create \
# --build-name "${{ env.JFROG_CLI_BUILD_NAME }}-container-latest" \
# --build-number "${{ env.VERSION }}" \
# --image-file ./meta-info \
# --project ecosystem \
# ecosystem-container-dev-local

# - name: Publish Build Info for latest
# if: github.event_name == 'workflow_dispatch' && github.event.inputs.is_release == 'true' || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))
# run: |
# jfrog rt build-collect-env "${{ env.JFROG_CLI_BUILD_NAME }}-container-latest" "${{ env.VERSION }}"
# jfrog rt build-add-git "${{ env.JFROG_CLI_BUILD_NAME }}-container-latest" "${{ env.VERSION }}"
# jfrog rt build-add-dependencies "${{ env.JFROG_CLI_BUILD_NAME }}-container-latest" "${{ env.VERSION }}".
# jf rt build-publish \
# --detailed-summary \
# --project ecosystem \
# "${{ env.JFROG_CLI_BUILD_NAME }}-container-latest" "${{ env.VERSION }}"

- name: Create Release Bundle
if: github.event_name == 'workflow_dispatch' && github.event.inputs.is_release == 'true'|| (github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/')))
run: |
echo '{

"name": "${{ env.JFROG_CLI_BUILD_NAME }}",
"version": "${{ env.VERSION }}",
"description": "Release bundle for ${{github.repository}} version ${{ env.VERSION }}",
"files": [
{
"project": "ecosystem",
"build": "${{ env.JFROG_CLI_BUILD_NAME }}-container"
}
]
}' > release-bundle-spec.json
cat release-bundle-spec.json

jf release-bundle-create \
"${{ env.JFROG_CLI_BUILD_NAME }}" "${{ env.VERSION }}"\
--project ecosystem \
--spec release-bundle-spec.json \
--signing-key aerospike --sync
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ VERSION.md
build-metadata
bin/asvec-linux-amd64
docker/asvec.docker/meta-info
meta-info
12 changes: 0 additions & 12 deletions docker/asvec.docker/bake.hcl
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
variable "VERSION_ARG" {
default = "0.0.0"
}

variable "REPO" {
default = "artifact.aerospike.io/ecosystem-container-dev-local"
}

group "default" {
targets = ["asvec"]
Expand All @@ -15,10 +8,5 @@ target "asvec" {
dockerfile = "./Dockerfile"
platforms = ["linux/amd64", "linux/arm64"]
tags = [
"${REPO}/asvec:${VERSION_ARG}",
"${REPO}/asvec:latest",
]
args = {
VERSION = "${VERSION_ARG}"
}
}
Loading