mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
ci: check if the image exists in ghcr.io to avoid repeat building and pushing (#283)
* ci: check if the image exists in ghcr.io to avoid repeat building and pushing. * feat: add push MAJOR and MINOR version to ghcr.io
This commit is contained in:
parent
ec073834ad
commit
a08c82d35e
30
.github/workflows/ghcr.yml
vendored
30
.github/workflows/ghcr.yml
vendored
@ -6,14 +6,14 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
reason:
|
||||
description: 'Why manual trigger?'
|
||||
required: false
|
||||
description: 'Reason for manual trigger'
|
||||
required: true
|
||||
default: ''
|
||||
|
||||
jobs:
|
||||
ghcr_build_and_push:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push'
|
||||
if: github.event_name == 'push' || github.event.inputs.reason != ''
|
||||
|
||||
steps:
|
||||
- name: checkout
|
||||
@ -35,11 +35,25 @@ jobs:
|
||||
DOCKER_BUILD_ORG=$(echo "${{ github.repository }}" | tr '[A-Z]' '[a-z]' | cut -d '/' -f 1)
|
||||
# Find directories containing Dockerfile but not containing .dockerfileignore
|
||||
while IFS= read -r dockerfile_dir; do
|
||||
|
||||
# Check if .dockerfileignore exists in the directory
|
||||
if [ ! -f "$dockerfile_dir/.dockerfileignore" ]; then
|
||||
# Change directory and execute 'make all'
|
||||
pushd "$dockerfile_dir" > /dev/null
|
||||
make all DOCKER_BUILD_ORG=$DOCKER_BUILD_ORG
|
||||
popd > /dev/null
|
||||
if [ -f "$dockerfile_dir/.dockerfileignore" ]; then
|
||||
echo "$dockerfile_dir/.dockerfileignore exists, skipping build and push"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check if image was already exist in ghcr.io
|
||||
pushd "$dockerfile_dir" > /dev/null
|
||||
FULL_IMAGE=$(make get-full-image DOCKER_BUILD_ORG=$DOCKER_BUILD_ORG)
|
||||
popd > /dev/null
|
||||
EXISTS=$(docker manifest inspect "$FULL_IMAGE" > /dev/null 2>&1 && echo "true" || echo "false")
|
||||
if [ "$EXISTS" == "true" ]; then
|
||||
echo "Image $FULL_IMAGE already exists in ghcr.io, skipping build and push"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Build and push the image to ghcr.io
|
||||
pushd "$dockerfile_dir" > /dev/null
|
||||
make all DOCKER_BUILD_ORG=$DOCKER_BUILD_ORG
|
||||
popd > /dev/null
|
||||
done < <(find . -type f -name Dockerfile -exec dirname {} \; | sort -u)
|
||||
|
||||
@ -1,10 +1,16 @@
|
||||
DOCKER_BUILD_REGISTRY=ghcr.io
|
||||
DOCKER_BUILD_ORG=opendevin
|
||||
DOCKER_BUILD_REPO=eval-swe-bench
|
||||
DOCKER_BUILD_TAG=v0.1
|
||||
DOCKER_BUILD_TAG=v0.1.0
|
||||
FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(DOCKER_BUILD_TAG)
|
||||
|
||||
LATEST_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):latest
|
||||
|
||||
MAJOR_VERSION=$(shell echo $(DOCKER_BUILD_TAG) | cut -d. -f1)
|
||||
MAJOR_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(MAJOR_VERSION)
|
||||
MINOR_VERSION=$(shell echo $(DOCKER_BUILD_TAG) | cut -d. -f1,2)
|
||||
MINOR_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(MINOR_VERSION)
|
||||
|
||||
# normally, for local build testing or development. use cross platform build for sharing images to others.
|
||||
build:
|
||||
docker build -f Dockerfile -t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} .
|
||||
@ -19,4 +25,7 @@ test:
|
||||
# cross platform build, you may need to manually stop the buildx(buildkit) container
|
||||
all:
|
||||
docker buildx build --platform linux/amd64,linux/arm64 \
|
||||
-t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} --push -f Dockerfile .
|
||||
-t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} -t ${MINOR_FULL_IMAGE} --push -f Dockerfile .
|
||||
|
||||
get-full-image:
|
||||
@echo ${FULL_IMAGE}
|
||||
|
||||
@ -1,10 +1,16 @@
|
||||
DOCKER_BUILD_REGISTRY=ghcr.io
|
||||
DOCKER_BUILD_ORG=opendevin
|
||||
DOCKER_BUILD_REPO=sandbox
|
||||
DOCKER_BUILD_TAG=v0.1
|
||||
DOCKER_BUILD_TAG=v0.1.0
|
||||
FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(DOCKER_BUILD_TAG)
|
||||
|
||||
LATEST_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):latest
|
||||
|
||||
MAJOR_VERSION=$(shell echo $(DOCKER_BUILD_TAG) | cut -d. -f1)
|
||||
MAJOR_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(MAJOR_VERSION)
|
||||
MINOR_VERSION=$(shell echo $(DOCKER_BUILD_TAG) | cut -d. -f1,2)
|
||||
MINOR_FULL_IMAGE=$(DOCKER_BUILD_REGISTRY)/$(DOCKER_BUILD_ORG)/$(DOCKER_BUILD_REPO):$(MINOR_VERSION)
|
||||
|
||||
# normally, for local build testing or development. use cross platform build for sharing images to others.
|
||||
build:
|
||||
docker build -f Dockerfile -t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} .
|
||||
@ -19,4 +25,7 @@ test:
|
||||
# cross platform build, you may need to manually stop the buildx(buildkit) container
|
||||
all:
|
||||
docker buildx build --platform linux/amd64,linux/arm64 \
|
||||
-t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} --push -f Dockerfile .
|
||||
-t ${FULL_IMAGE} -t ${LATEST_FULL_IMAGE} -t ${MINOR_FULL_IMAGE}--push -f Dockerfile .
|
||||
|
||||
get-full-image:
|
||||
@echo ${FULL_IMAGE}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user