Add auto-building

This commit is contained in:
SvenBrnn
2025-03-19 12:34:57 +01:00
parent df9f59ffb1
commit 5ff2642167
3 changed files with 208 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
name: 📦 Build custom Docker image and push to Docker Hub
# Workflow triggered manually (GitHub UI) or programmatically by the check-ollama-new-release workflow
on:
workflow_call:
inputs:
ollama_version:
description: 'ollama version to build. Example: 1.20.0'
required: true
type: string
next_version_suffix:
description: 'Next version suffix to compare with the new release. Example: 0'
required: false
type: string
workflow_dispatch:
inputs:
ollama_version:
description: 'ollama version to build. Example: 1.20.0'
required: true
type: string
next_version_suffix:
description: 'Next version suffix to compare with the new release. Example: 0'
required: false
type: string
jobs:
build-push-docker-image:
name: 🐳 Build and push Docker image
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: .
build-args: OLLAMA_VERSION=${{ inputs.ollama_version }}
push: true
tags: svenbrnn/runpod-ollama:${{ inputs.ollama_version }}${{ inputs.next_version_suffix }},svenbrnn/runpod-ollama:latest
create-release:
name: 🏷️ Create GitHub Release
needs: build-push-docker-image
runs-on: ubuntu-latest
timeout-minutes: 1
permissions:
contents: write
steps:
- uses: ncipollo/release-action@v1
with:
commit: main
tag: ollama@${{ inputs.ollama_version }}${{ inputs.next_version_suffix }}
@@ -0,0 +1,65 @@
name: 👀 Check for new ollama stable releases and builds a new custom image release if needed
on:
schedule:
- cron: '0 8 * * *' # Every day at 8am
workflow_dispatch:
jobs:
check-new-release:
runs-on: ubuntu-latest
timeout-minutes: 5
# Output mapping needed to share data between jobs. Separated jobs to reuse the build-and-push.yml workflow.
outputs:
has_new_release: ${{ steps.new_release_check.outputs.has_new_release }}
version_to_release: ${{ steps.ollama_version.outputs.version_to_release }}
steps:
- name: 🆕 Get the latest ollama release
id: custom_image_release
uses: dvershinin/lastversion-action@main
with:
repository: 'SvenBrnn/runpod-worker-ollama'
- name: 🆕 Get the latest ollama release
id: ollama_release
uses: dvershinin/lastversion-action@main
with:
repository: 'ollama/ollama'
- name: 🤲 Check if it is a newer ollama release
id: new_release_check
run: |
echo "👀 Latest Codely custom image release: ${{ steps.custom_image_release.outputs.release }}"
echo "🆕 Latest ollama release: ${{ steps.ollama_release.outputs.last_version }}"
custom_version_orig=$(echo "${{ steps.custom_image_release.outputs.release }}" | sed 's/ollama@//g')
custom_version=$(echo "$custom_version_orig" | sed 's/-[0-9]*//g') # Remove the suffix
ollama_version=$(echo "${{ steps.ollama_release.outputs.last_version }}" | sed 's/ollama@//g')
latest_version=$(echo -e "$custom_version\n$ollama_version" | sort -V | tail -n1)
if [ "$custom_version" != "$latest_version" ]; then
echo "has_new_release=true" >> $GITHUB_OUTPUT
echo "🤩 New release detected! Releasing new custom image version in 1, 2…"
else
echo "has_new_release=false" >> $GITHUB_OUTPUT
echo "👍 Release has not changed or it is previous to the current one. Doing nothing."
fi
- name: 🔡 Remove 'ollama@' from release name to get the version
id: ollama_version
if: steps.new_release_check.outputs.has_new_release == 'true'
run: |
version_to_release=$(echo "${{ steps.ollama_release.outputs.last_version }}" | sed 's/ollama@//g')
echo "version_to_release=$version_to_release" >> $GITHUB_OUTPUT
build-and-push-new-docker-image:
needs: check-new-release
if: ${{ needs.check-new-release.outputs.has_new_release == 'true' }}
uses: ./.github/workflows/build-and-push.yml
secrets: inherit
with:
ollama_version: ${{ needs.check-new-release.outputs.version_to_release }}
@@ -0,0 +1,86 @@
name: Create new release on push
on:
push:
branches:
- main
jobs:
check-new-release:
runs-on: ubuntu-latest
timeout-minutes: 5
# Output mapping needed to share data between jobs. Separated jobs to reuse the build-and-push.yml workflow.
outputs:
has_new_release: ${{ steps.new_release_check.outputs.has_new_release }}
version_to_release: ${{ steps.ollama_version.outputs.version_to_release }}
next_version_suffix: ${{ steps.new_release_check.outputs.next_version_suffix }}
steps:
- name: 🆕 Get the latest ollama release
id: custom_image_release
uses: dvershinin/lastversion-action@main
with:
repository: 'SvenBrnn/runpod-worker-ollama'
- name: 🆕 Get the latest ollama release
id: ollama_release
uses: dvershinin/lastversion-action@main
with:
repository: 'ollama/ollama'
- name: 🤲 Check if it is a newer ollama release
id: new_release_check
run: |
echo "👀 Latest Codely custom image release: ${{ steps.custom_image_release.outputs.release }}"
echo "🆕 Latest ollama release: ${{ steps.ollama_release.outputs.last_version }}"
custom_version_orig=$(echo "${{ steps.custom_image_release.outputs.release }}" | sed 's/ollama@//g')
custom_version=$(echo "$custom_version_orig" | sed 's/-[0-9]*//g') # Remove the suffix
ollama_version=$(echo "${{ steps.ollama_release.outputs.last_version }}" | sed 's/ollama@//g')
latest_version=$(echo -e "$custom_version\n$ollama_version" | sort -V | tail -n1)
echo "has_new_release=true" >> $GITHUB_OUTPUT
# Debug print
echo "custom_version_orig=$custom_version_orig"
echo "custom_version=$custom_version"
echo "ollama_version=$ollama_version"
# Calculate the next_version_suffix to compare with the new release
# If the custom_version does not equal the latest_version, then it is a new release and we don't need a suffix
if [ "$custom_version" != "$ollama_version" ]; then
echo "next_version_suffix=" >> $GITHUB_OUTPUT
else
# If the custom_version equals the latest_version, then it is a new release and we need to increment the suffix
# If there is no suffix present we start with 1
# Check if we have a - first
has_suffix=$(echo "$custom_version_orig" | sed 's/[^-]//g')
if [ -z "$has_suffix" ]; then
suffix="-1"
else
suffix=$(echo "$custom_version_orig" | grep -o '[0-9]*$')
suffix="-$((suffix + 1))"
fi
echo "next_version_suffix=$suffix"
echo "next_version_suffix=$suffix" >> $GITHUB_OUTPUT
fi
- name: 🔡 Remove 'ollama@' from release name to get the version
id: ollama_version
if: steps.new_release_check.outputs.has_new_release == 'true'
run: |
version_to_release=$(echo "${{ steps.ollama_release.outputs.last_version }}" | sed 's/ollama@//g')
echo "version_to_release=$version_to_release" >> $GITHUB_OUTPUT
echo "next_version_suffix=${{ steps.new_release_check.outputs.next_version_suffix }}" >> $GITHUB_OUTPUT
build-and-push-new-docker-image:
needs: check-new-release
if: ${{ needs.check-new-release.outputs.has_new_release == 'true' }}
uses: ./.github/workflows/build-and-push.yml
secrets: inherit
with:
ollama_version: ${{ needs.check-new-release.outputs.version_to_release }}
next_version_suffix: ${{ needs.check-new-release.outputs.next_version_suffix }}