diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index d0f1a75..1517e6d 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -1,4 +1,4 @@ -name: Build and Push Docker Image +name: Build and Push Docker Images on: push: @@ -9,7 +9,7 @@ on: workflow_dispatch: jobs: - build-and-push: + build-api: runs-on: ubuntu-latest steps: - name: Install dependencies @@ -31,32 +31,24 @@ jobs: REPO_OWNER="${{ gitea.repository_owner }}" REPO_NAME="${{ gitea.repository }}" - # Extract repository name without owner REPO_NAME_ONLY=$(echo "$REPO_NAME" | cut -d'/' -f2) - - # Convert to lowercase for Docker registry compatibility REPO_OWNER_LOWER=$(echo "$REPO_OWNER" | tr '[:upper:]' '[:lower:]') REPO_NAME_LOWER=$(echo "$REPO_NAME_ONLY" | tr '[:upper:]' '[:lower:]') - # Base image path IMAGE_BASE="${REGISTRY}/${REPO_OWNER_LOWER}/${REPO_NAME_LOWER}" - # Determine tag based on ref case "${{ gitea.ref }}" in refs/tags/*) - # Tag push - use the tag name TAG_NAME="${{ gitea.ref_name }}" echo "IMAGE_TAG=${IMAGE_BASE}:${TAG_NAME}" >> $GITHUB_OUTPUT echo "PUSH_LATEST=true" >> $GITHUB_OUTPUT ;; refs/heads/main) - # Main branch - use commit SHA (shortened to 7 chars) and latest SHORT_SHA=$(echo "${{ gitea.sha }}" | cut -c1-7) echo "IMAGE_TAG=${IMAGE_BASE}:${SHORT_SHA}" >> $GITHUB_OUTPUT echo "PUSH_LATEST=true" >> $GITHUB_OUTPUT ;; *) - # Other branches - use branch name BRANCH_TAG=$(echo "${{ gitea.ref_name }}" | sed 's/\//-/g') echo "IMAGE_TAG=${IMAGE_BASE}:${BRANCH_TAG}" >> $GITHUB_OUTPUT echo "PUSH_LATEST=false" >> $GITHUB_OUTPUT @@ -70,13 +62,13 @@ jobs: run: | echo "${{ secrets.PERSONAL_TOKEN }}" | docker login gitea.leeworks.dev -u "${{ gitea.actor }}" --password-stdin - - name: Build and push with Docker + - name: Build and push API image shell: sh run: | - echo "Building image..." + echo "Building API image..." docker build -t ${{ steps.tags.outputs.IMAGE_TAG }} . - echo "Pushing image..." + echo "Pushing API image..." docker push ${{ steps.tags.outputs.IMAGE_TAG }} if [ "${{ steps.tags.outputs.PUSH_LATEST }}" = "true" ]; then @@ -85,5 +77,74 @@ jobs: docker push ${{ steps.tags.outputs.IMAGE_LATEST }} fi - echo "Build and push completed successfully!" - echo "Image available at ${{ steps.tags.outputs.IMAGE_TAG }}" + echo "API image available at ${{ steps.tags.outputs.IMAGE_TAG }}" + + build-frontend: + runs-on: ubuntu-latest + steps: + - name: Install dependencies + shell: sh + run: | + apk add --no-cache git docker-cli + + - name: Checkout code + shell: sh + run: | + git clone https://gitea.leeworks.dev/${{ gitea.repository }}.git . + git checkout ${{ gitea.sha }} + + - name: Determine image tags + id: tags + shell: sh + run: | + REGISTRY="gitea.leeworks.dev" + REPO_OWNER="${{ gitea.repository_owner }}" + REPO_NAME="${{ gitea.repository }}" + + REPO_NAME_ONLY=$(echo "$REPO_NAME" | cut -d'/' -f2) + REPO_OWNER_LOWER=$(echo "$REPO_OWNER" | tr '[:upper:]' '[:lower:]') + REPO_NAME_LOWER=$(echo "$REPO_NAME_ONLY" | tr '[:upper:]' '[:lower:]') + + IMAGE_BASE="${REGISTRY}/${REPO_OWNER_LOWER}/${REPO_NAME_LOWER}" + + case "${{ gitea.ref }}" in + refs/tags/*) + TAG_NAME="${{ gitea.ref_name }}" + echo "IMAGE_TAG=${IMAGE_BASE}:frontend-${TAG_NAME}" >> $GITHUB_OUTPUT + echo "PUSH_LATEST=true" >> $GITHUB_OUTPUT + ;; + refs/heads/main) + SHORT_SHA=$(echo "${{ gitea.sha }}" | cut -c1-7) + echo "IMAGE_TAG=${IMAGE_BASE}:frontend-${SHORT_SHA}" >> $GITHUB_OUTPUT + echo "PUSH_LATEST=true" >> $GITHUB_OUTPUT + ;; + *) + BRANCH_TAG=$(echo "${{ gitea.ref_name }}" | sed 's/\//-/g') + echo "IMAGE_TAG=${IMAGE_BASE}:frontend-${BRANCH_TAG}" >> $GITHUB_OUTPUT + echo "PUSH_LATEST=false" >> $GITHUB_OUTPUT + ;; + esac + + echo "IMAGE_LATEST=${IMAGE_BASE}:frontend-latest" >> $GITHUB_OUTPUT + + - name: Login to registry + shell: sh + run: | + echo "${{ secrets.PERSONAL_TOKEN }}" | docker login gitea.leeworks.dev -u "${{ gitea.actor }}" --password-stdin + + - name: Build and push frontend image + shell: sh + run: | + echo "Building frontend image..." + docker build -t ${{ steps.tags.outputs.IMAGE_TAG }} ./frontend + + echo "Pushing frontend image..." + docker push ${{ steps.tags.outputs.IMAGE_TAG }} + + if [ "${{ steps.tags.outputs.PUSH_LATEST }}" = "true" ]; then + echo "Tagging and pushing frontend-latest..." + docker tag ${{ steps.tags.outputs.IMAGE_TAG }} ${{ steps.tags.outputs.IMAGE_LATEST }} + docker push ${{ steps.tags.outputs.IMAGE_LATEST }} + fi + + echo "Frontend image available at ${{ steps.tags.outputs.IMAGE_TAG }}"