feat: add is:broken search qualifier for broken links (#2225) #1056
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Push Docker | |
| on: | |
| release: | |
| types: | |
| - created | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| build: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: [linux/amd64, linux/arm64] | |
| image: [web, workers, cli, mcp, aio] | |
| include: | |
| - platform: linux/amd64 | |
| suffix: amd64 | |
| os: ubuntu-latest | |
| - platform: linux/arm64 | |
| suffix: arm64 | |
| os: ubuntu-24.04-arm | |
| - image: web | |
| name: karakeep-web | |
| target: web | |
| tags_latest: ghcr.io/hoarder-app/hoarder-web:latest,ghcr.io/mohamedbassem/hoarder-web:latest,ghcr.io/karakeep-app/karakeep-web:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-web:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-web:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-web:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-web:release,ghcr.io/mohamedbassem/hoarder-web:release,ghcr.io/karakeep-app/karakeep-web:release | |
| - image: workers | |
| name: karakeep-workers | |
| target: workers | |
| tags_latest: ghcr.io/hoarder-app/hoarder-workers:latest,ghcr.io/mohamedbassem/hoarder-workers:latest,ghcr.io/karakeep-app/karakeep-workers:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-workers:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-workers:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-workers:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-workers:release,ghcr.io/mohamedbassem/hoarder-workers:release,ghcr.io/karakeep-app/karakeep-workers:release | |
| - image: cli | |
| name: karakeep-cli | |
| target: cli | |
| tags_latest: ghcr.io/hoarder-app/hoarder-cli:latest,ghcr.io/mohamedbassem/hoarder-cli:latest,ghcr.io/karakeep-app/karakeep-cli:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-cli:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-cli:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-cli:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-cli:release,ghcr.io/mohamedbassem/hoarder-cli:release,ghcr.io/karakeep-app/karakeep-cli:release | |
| - image: mcp | |
| name: karakeep-mcp | |
| target: mcp | |
| tags_latest: ghcr.io/karakeep-app/karakeep-mcp:latest | |
| tags_release: ghcr.io/karakeep-app/karakeep-mcp:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-mcp:release | |
| - image: aio | |
| name: karakeep-aio | |
| target: aio | |
| tags_latest: ghcr.io/hoarder-app/hoarder:latest,ghcr.io/karakeep-app/karakeep:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder:release,ghcr.io/karakeep-app/karakeep:release | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| packages: write | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Github Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GHCR_GITHUB_PAT }} | |
| - name: Prepare tags | |
| id: tags | |
| run: | | |
| set -euo pipefail | |
| add_suffix() { | |
| local value="$1" | |
| local out="" | |
| IFS=',' read -ra items <<< "$value" | |
| for item in "${items[@]}"; do | |
| out+="${item}-${{ matrix.suffix }}," | |
| done | |
| echo "${out%,}" | |
| } | |
| all_tags="" | |
| # Only push 'latest' tags on pushes to main, not on releases | |
| if [[ "${{ github.event_name }}" == "push" ]]; then | |
| latest_with_suffix=$(add_suffix "${{ matrix.tags_latest }}") | |
| all_tags="${latest_with_suffix}" | |
| echo "latest=${latest_with_suffix}" >> "$GITHUB_OUTPUT" | |
| fi | |
| # Only push release-specific tags on releases | |
| if [[ "${{ github.event_name }}" == "release" ]]; then | |
| release_with_suffix=$(add_suffix "${{ matrix.tags_release }}") | |
| all_tags="${release_with_suffix}" | |
| echo "release=${release_with_suffix}" >> "$GITHUB_OUTPUT" | |
| fi | |
| echo "all=${all_tags}" >> "$GITHUB_OUTPUT" | |
| - name: Build ${{ matrix.name }} | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| build-args: SERVER_VERSION=${{ github.event_name == 'release' && github.event.release.name || 'nightly' }} | |
| file: docker/Dockerfile | |
| target: ${{ matrix.target }} | |
| platforms: ${{ matrix.platform }} | |
| push: true | |
| tags: ${{ steps.tags.outputs.all }} | |
| cache-from: type=registry,ref=ghcr.io/karakeep-app/karakeep-build-cache:${{ matrix.target }}-${{ matrix.suffix }} | |
| cache-to: type=registry,mode=max,ref=ghcr.io/karakeep-app/karakeep-build-cache:${{ matrix.target }}-${{ matrix.suffix }} | |
| manifest: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| packages: write | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: karakeep-web | |
| tags_latest: ghcr.io/hoarder-app/hoarder-web:latest,ghcr.io/mohamedbassem/hoarder-web:latest,ghcr.io/karakeep-app/karakeep-web:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-web:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-web:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-web:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-web:release,ghcr.io/mohamedbassem/hoarder-web:release,ghcr.io/karakeep-app/karakeep-web:release | |
| - name: karakeep-workers | |
| tags_latest: ghcr.io/hoarder-app/hoarder-workers:latest,ghcr.io/mohamedbassem/hoarder-workers:latest,ghcr.io/karakeep-app/karakeep-workers:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-workers:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-workers:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-workers:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-workers:release,ghcr.io/mohamedbassem/hoarder-workers:release,ghcr.io/karakeep-app/karakeep-workers:release | |
| - name: karakeep-cli | |
| tags_latest: ghcr.io/hoarder-app/hoarder-cli:latest,ghcr.io/mohamedbassem/hoarder-cli:latest,ghcr.io/karakeep-app/karakeep-cli:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder-cli:${{ github.event.release.name }},ghcr.io/mohamedbassem/hoarder-cli:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-cli:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder-cli:release,ghcr.io/mohamedbassem/hoarder-cli:release,ghcr.io/karakeep-app/karakeep-cli:release | |
| - name: karakeep-mcp | |
| tags_latest: ghcr.io/karakeep-app/karakeep-mcp:latest | |
| tags_release: ghcr.io/karakeep-app/karakeep-mcp:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep-mcp:release | |
| - name: karakeep-aio | |
| tags_latest: ghcr.io/hoarder-app/hoarder:latest,ghcr.io/karakeep-app/karakeep:latest | |
| tags_release: ghcr.io/hoarder-app/hoarder:${{ github.event.release.name }},ghcr.io/karakeep-app/karakeep:${{ github.event.release.name }},ghcr.io/hoarder-app/hoarder:release,ghcr.io/karakeep-app/karakeep:release | |
| steps: | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Github Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GHCR_GITHUB_PAT }} | |
| - name: Create manifests for ${{ matrix.name }} | |
| env: | |
| TAGS_LATEST: ${{ matrix.tags_latest }} | |
| TAGS_RELEASE: ${{ matrix.tags_release }} | |
| IS_RELEASE: ${{ github.event_name == 'release' }} | |
| IS_PUSH: ${{ github.event_name == 'push' }} | |
| run: | | |
| set -euo pipefail | |
| create_manifest() { | |
| local tag="$1" | |
| docker buildx imagetools create \ | |
| -t "${tag}" \ | |
| "${tag}-amd64" \ | |
| "${tag}-arm64" | |
| } | |
| # Only create 'latest' manifests on pushes to main | |
| if [[ "${IS_PUSH}" == "true" ]]; then | |
| IFS=',' read -ra latest_tags <<< "${TAGS_LATEST}" | |
| for tag in "${latest_tags[@]}"; do | |
| create_manifest "$tag" | |
| done | |
| fi | |
| # Only create release-specific manifests on releases | |
| if [[ "${IS_RELEASE}" == "true" ]]; then | |
| IFS=',' read -ra release_tags <<< "${TAGS_RELEASE}" | |
| for tag in "${release_tags[@]}"; do | |
| create_manifest "$tag" | |
| done | |
| fi |