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 uses: actions/checkout@v4 - 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: Determine tags id: tags run: | SHA_SHORT=$(echo ${GITHUB_SHA} | cut -c1-7) 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 "tags=${TAGS}" >> $GITHUB_OUTPUT echo "Building tags: ${TAGS}" - name: Build and push run: | TAG_ARGS="" IFS=',' read -ra TAG_ARRAY <<< "${{ steps.tags.outputs.tags }}" for tag in "${TAG_ARRAY[@]}"; do TAG_ARGS="${TAG_ARGS} -t ${tag}" done echo "docker build ${TAG_ARGS} --build-arg NEXT_PUBLIC_API_URL=... ." 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