diff --git a/.github/workflows/dockerhub-description.yml b/.github/workflows/dockerhub-description.yml new file mode 100644 index 0000000..87a8775 --- /dev/null +++ b/.github/workflows/dockerhub-description.yml @@ -0,0 +1,59 @@ +name: Docker Hub Description + +on: + push: + branches: + - main + paths: + - README.md + - .github/workflows/dockerhub-description.yml + +jobs: + dockerhub-description: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Preflight Docker Hub repository access + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} + DOCKERHUB_REPOSITORY: jcreek23/open-network-diagram + run: | + set -euo pipefail + + if [ -z "${DOCKERHUB_USERNAME}" ] || [ -z "${DOCKERHUB_PASSWORD}" ]; then + echo "Missing DOCKERHUB_USERNAME or DOCKERHUB_PASSWORD secret." + exit 1 + fi + + LOGIN_RESPONSE="$(curl -fsS -X POST \ + -H 'Content-Type: application/json' \ + -d "{\"username\":\"${DOCKERHUB_USERNAME}\",\"password\":\"${DOCKERHUB_PASSWORD}\"}" \ + https://hub.docker.com/v2/users/login/)" + + TOKEN="$(printf '%s' "${LOGIN_RESPONSE}" | ruby -rjson -e 'input = STDIN.read; data = JSON.parse(input); puts data.fetch("token", "")')" + + if [ -z "${TOKEN}" ]; then + echo "Docker Hub login succeeded but token was missing." + exit 1 + fi + + curl -fsS \ + -H "Authorization: JWT ${TOKEN}" \ + "https://hub.docker.com/v2/repositories/${DOCKERHUB_REPOSITORY}/" >/dev/null + + echo "Docker Hub preflight access check passed for ${DOCKERHUB_REPOSITORY}." + + - name: Update Docker Hub repository overview + uses: peter-evans/dockerhub-description@v5 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + repository: jcreek23/open-network-diagram + readme-filepath: ./README.md + enable-url-completion: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7026c01..3836b7e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,27 +13,6 @@ concurrency: cancel-in-progress: false jobs: - changed-files: - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - readme: ${{ steps.filter.outputs.readme }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Detect changed files - id: filter - uses: dorny/paths-filter@v3 - with: - filters: | - readme: - - README.md - release: runs-on: ubuntu-latest permissions: @@ -110,23 +89,3 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - - dockerhub-overview: - needs: changed-files - if: needs.changed-files.outputs.readme == 'true' - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Update Docker Hub repository overview - uses: peter-evans/dockerhub-description@v5 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - repository: ${{ env.IMAGE_NAME }} - readme-filepath: ./README.md - enable-url-completion: true diff --git a/README.md b/README.md index 422ebc9..ebd1501 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Open Network Diagram helps you document your infrastructure in a visual UI while - Homelab-friendly: run it in minutes with Docker. - Practical: edit in the UI and autosave to `network.json`. -- Declarative: keep your topology in Git if you wish. +- Declarative: keep your topology in Git if you want. [Docker Hub](https://hub.docker.com/r/jcreek23/open-network-diagram) | [Live Demo (Read-Only)](https://opennetworkdiagram.jcreek.co.uk) | [GitHub Releases](https://github.com/jcreek/OpenNetworkDiagram/releases)