name: Build & Push Docker Image on: push: branches: [main, master] tags: ['v*'] workflow_dispatch: inputs: api_url: description: 'API URL for frontend build' required: false default: 'http://ut.khoavo.myds.me:8981/api' type: string env: REGISTRY: git.khoavo.myds.me IMAGE: git.khoavo.myds.me/vndangkhoa/kv-tube jobs: build: runs-on: docker steps: - name: Checkout run: | git clone https://vndangkhoa:${{ secrets.FORGEJO_PASSWORD }}@git.khoavo.myds.me/vndangkhoa/kv-tube.git /tmp/kv-tube cd /tmp/kv-tube git checkout ${GITHUB_SHA:-main} echo "Checked out commit: $(git rev-parse --short HEAD)" - name: Docker info run: docker info - name: Log into registry run: echo "${{ secrets.FORGEJO_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u ${{ secrets.FORGEJO_USERNAME }} --password-stdin - name: Build and push run: | cd /tmp/kv-tube SHA_SHORT=$(git rev-parse --short HEAD) TAGS="${{ env.IMAGE }}:${SHA_SHORT}" if [ "${GITHUB_REF}" = "refs/heads/main" ] || [ "${GITHUB_REF}" = "refs/heads/master" ]; then TAGS="${TAGS},${{ env.IMAGE }}:main" fi if echo "${GITHUB_REF}" | grep -q "refs/tags/v"; then VERSION=${GITHUB_REF#refs/tags/v} TAGS="${TAGS},${{ env.IMAGE }}:${VERSION},${{ env.IMAGE }}:latest" fi echo "Building tags: ${TAGS}" TAG_ARGS="" IFS=',' read -ra TAG_ARRAY <<< "${TAGS}" for tag in "${TAG_ARRAY[@]}"; do TAG_ARGS="${TAG_ARGS} -t ${tag}" done docker build \ ${TAG_ARGS} \ --build-arg NEXT_PUBLIC_API_URL=${{ github.event.inputs.api_url || 'http://ut.khoavo.myds.me:8981/api' }} \ . for tag in "${TAG_ARRAY[@]}"; do echo "Pushing ${tag}..." docker push "${tag}" done - name: Verify run: docker images | grep kv-tube - name: Cleanup if: always() run: rm -rf /tmp/kv-tube