universalize
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 15m50s

This commit is contained in:
2025-12-09 20:01:03 -03:00
parent dfed5525f0
commit 5b3d4136ed
7 changed files with 95 additions and 466 deletions

View File

@@ -30,6 +30,63 @@ jobs:
with:
fetch-depth: 0
- name: Check for Dockerargs and Upstream Updates
id: check_upstream
run: |
if [ -f Dockerargs ]; then
echo "Dockerargs found. Checking upstream..."
echo "Dockerargs found. Checking upstream..."
# Parse repo info using awk to avoid git config restrictions on underscores in keys elsewhere in the file
REPO_URL=$(awk -F '=' '/\[repo\]/{flag=1; next} /\[/{flag=0} flag && /^url=/{print $2}' Dockerargs | tr -d ' \r\n')
REPO_BRANCH=$(awk -F '=' '/\[repo\]/{flag=1; next} /\[/{flag=0} flag && /^branch=/{print $2}' Dockerargs | tr -d ' \r\n')
if [ -z "$REPO_BRANCH" ]; then REPO_BRANCH="main"; fi
# Fetch upstream SHA
if [ -n "$REPO_URL" ]; then
UPSTREAM_SHA=$(git ls-remote "$REPO_URL" "$REPO_BRANCH" | awk '{ print $1 }' | head -c 7)
echo "Upstream SHA: $UPSTREAM_SHA"
if [ -f manifest.json ]; then
LOCAL_SHA=$(jq -r '.upstream_sha // empty' manifest.json)
else
LOCAL_SHA=""
fi
if [ "$LOCAL_SHA" != "$UPSTREAM_SHA" ]; then
echo "Upstream changed ($LOCAL_SHA -> $UPSTREAM_SHA)."
echo "upstream_needs_update=true" >> "$GITHUB_OUTPUT"
echo "upstream_sha=$UPSTREAM_SHA" >> "$GITHUB_OUTPUT"
echo "repo_url=$REPO_URL" >> "$GITHUB_OUTPUT"
echo "repo_branch=$REPO_BRANCH" >> "$GITHUB_OUTPUT"
else
echo "Upstream up to date."
echo "upstream_needs_update=false" >> "$GITHUB_OUTPUT"
fi
# Parse Build Args
echo "Parsing [args] from Dockerargs..."
ARGS_CONTENT=$(sed -n '/^\[args\]/,/^\[/p' Dockerargs | grep -v '^\[' | grep '=' || true)
if [ -n "$ARGS_CONTENT" ]; then
echo "Found args:"
echo "$ARGS_CONTENT"
echo "build_args<<EOF" >> "$GITHUB_OUTPUT"
echo "$ARGS_CONTENT" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
else
echo "No args found."
echo "build_args=" >> "$GITHUB_OUTPUT"
fi
else
echo "Repo URL not found in Dockerargs."
echo "upstream_needs_update=false" >> "$GITHUB_OUTPUT"
echo "build_args=" >> "$GITHUB_OUTPUT"
fi
else
echo "No Dockerargs found."
echo "upstream_needs_update=false" >> "$GITHUB_OUTPUT"
echo "build_args=" >> "$GITHUB_OUTPUT"
fi
- name: Check if any tags exist
id: check_tags_exist
run: |
@@ -47,7 +104,11 @@ jobs:
- name: Check if meaningful commits exist since latest tag
id: check_commits
run: |
if [ "${{ steps.check_tags_exist.outputs.has_tags }}" = "false" ]; then
UPSTREAM_UPDATE="${{ steps.check_upstream.outputs.upstream_needs_update }}"
if [ "$UPSTREAM_UPDATE" == "true" ]; then
echo "commit_count=1" >> "$GITHUB_OUTPUT"
echo "changed_files=Upstream Update to ${{ steps.check_upstream.outputs.upstream_sha }}" >> "$GITHUB_OUTPUT"
elif [ "${{ steps.check_tags_exist.outputs.has_tags }}" = "false" ]; then
# No tags exist, so we should create first release
echo "commit_count=1" >> "$GITHUB_OUTPUT"
CHANGED_FILES=$(git ls-files | grep -v '^manifest.json$' || true)
@@ -183,11 +244,16 @@ jobs:
VERSION="${{ steps.version.outputs.VERSION }}"
AUTHOR="Ivan Carlos"
VERSION_FILE="manifest.json"
UPSTREAM_SHA="${{ steps.check_upstream.outputs.upstream_sha }}"
if [ -f "$VERSION_FILE" ]; then
jq --arg v "$VERSION" --arg a "$AUTHOR" \
'.version = $v | .author = $a' "$VERSION_FILE" > tmp.json && mv tmp.json "$VERSION_FILE"
jq --arg v "$VERSION" \
--arg a "$AUTHOR" \
--arg u "$UPSTREAM_SHA" \
'.version = $v | .author = $a | if $u != "" and $u != null then .upstream_sha = $u else . end' \
"$VERSION_FILE" > tmp.json && mv tmp.json "$VERSION_FILE"
else
echo "{ \"version\": \"$VERSION\", \"author\": \"$AUTHOR\" }" > "$VERSION_FILE"
echo "{ \"version\": \"$VERSION\", \"author\": \"$AUTHOR\", \"upstream_sha\": \"$UPSTREAM_SHA\" }" > "$VERSION_FILE"
fi
- name: 💾 Commit and push updated manifest.json
@@ -260,11 +326,26 @@ jobs:
-o /dev/null
# ----- Docker steps -----
- name: Clone Upstream Code (if needed)
if: steps.check_commits.outputs.commit_count != '0' && (steps.check_upstream.outputs.upstream_needs_update == 'true' || steps.check_upstream.outputs.repo_url != '')
run: |
rm -rf upstream_src
git clone --depth 1 --branch ${{ steps.check_upstream.outputs.repo_branch }} ${{ steps.check_upstream.outputs.repo_url }} upstream_src
- name: 🔍 Check if Dockerfile exists
if: steps.check_commits.outputs.commit_count != '0'
if: steps.check_commits.outputs.commit_count != '0' || steps.check_upstream.outputs.upstream_needs_update == 'true'
id: dockerfile_check
run: |
if [ -f Dockerfile ]; then
if [ -n "${{ steps.check_upstream.outputs.repo_url }}" ]; then
if [ -f upstream_src/Dockerfile ]; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
# Fallback or error? User said "ignore", but we need a dockerfile to build.
# Assuming if upstream_src is present, we trust it, or fail at build time.
# Let's say exists=true and let build fail if missing, per user hint.
echo "exists=true" >> "$GITHUB_OUTPUT"
fi
elif [ -f Dockerfile ]; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
@@ -289,10 +370,14 @@ jobs:
- name: 🐳 Build and Push Docker image
if: steps.check_commits.outputs.commit_count != '0' && steps.dockerfile_check.outputs.exists == 'true'
uses: docker/build-push-action@v5
id: docker_build
with:
context: .
context: ${{ steps.check_upstream.outputs.repo_url != '' && './upstream_src' || '.' }}
platforms: linux/amd64,linux/arm64
file: ${{ steps.check_upstream.outputs.repo_url != '' && './upstream_src/Dockerfile' || './Dockerfile' }}
push: true
build-args: |
${{ steps.check_upstream.outputs.build_args }}
tags: |
git.icc.gg/${{ gitea.repository }}:latest
git.icc.gg/${{ gitea.repository }}:${{ steps.version.outputs.VERSION }}