123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- name: release
- on:
- push:
- branches:
- - 'master'
- workflow_dispatch:
-
- jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- with:
- fetch-depth: '0'
-
- - name: Set env variables
- run: |
- echo "GITHUB_DATE=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
- echo "GITHUB_SHA=${{ github.sha }}" >> $GITHUB_ENV
-
- - name: Get latest Webapp release version
- run: |
- WEBAPP_RELEASE=$(curl -sX GET "https://api.github.com/repos/netbootxyz/webapp/releases/latest" | jq -r '. | .tag_name')
- echo "WEBAPP_RELEASE=${WEBAPP_RELEASE}" >> $GITHUB_ENV
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
-
- - name: Login to the Docker Container Registry
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USER }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Login to the GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ secrets.GHCR_USER }}
- password: ${{ secrets.GHCR_TOKEN }}
- - name: Determine version numbers
- id: version_check
- continue-on-error: true
- run: |
- IMAGE=netbootxyz/netbootxyz
- TOKEN=$(curl -sX GET \
- "https://ghcr.io/token?scope=repository%3Anetbootxyz%2Fnetbootxyz%3Apull" \
- | jq -r '.token')
- TAG=$(curl -s --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
- --header "Authorization: Bearer ${TOKEN}" \
- "https://ghcr.io/v2/${IMAGE}/tags/list?n=1000" \
- | jq -r '.tags[-1]')
- echo LATEST_TAG: $TAG
- MULTIDIGEST=$(curl -s \
- --header "Accept: application/vnd.oci.image.index.v1+json" \
- --header "Authorization: Bearer ${TOKEN}" \
- "https://ghcr.io/v2/${IMAGE}/manifests/${TAG}" \
- | jq -r 'first(.manifests[].digest)')
- DIGEST=$(curl -s \
- --header "Accept: application/vnd.oci.image.manifest.v1+json" \
- --header "Authorization: Bearer ${TOKEN}" \
- "https://ghcr.io/v2/${IMAGE}/manifests/${MULTIDIGEST}" \
- | jq -r '.config.digest')
- IMAGE_INFO=$(curl -sL \
- --header "Authorization: Bearer ${TOKEN}" \
- "https://ghcr.io/v2/${IMAGE}/blobs/${DIGEST}" \
- | jq -r '.config')
- IMAGE_RELEASE=$(echo ${IMAGE_INFO} | jq -r '.Labels.build_version' | awk '{print $3}')
- IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-nbxyz' '{print $1}')
- NB_RELEASE_NUMBER=$(echo ${IMAGE_RELEASE} | awk -F'-nbxyz' '{print $2}')
- TAG_SHA=$(git rev-list -n 1 ${IMAGE_RELEASE})
- if [ -z "${MULTIDIGEST}" ] || [ "${MULTIDIGEST}" == "null" ]; then
- echo "**** No existing container build found, assuming first build ****"
- VERSION_TAG=${WEBAPP_RELEASE}-nbxyz1
- echo "VERSION_TAG=${VERSION_TAG}" >> $GITHUB_ENV
- elif [ "${WEBAPP_RELEASE}" == "${IMAGE_VERSION}" ]; then
- echo "**** Version ${WEBAPP_RELEASE} unchanged, checking if there is anything to build..."
- if [ "${TAG_SHA}" == "${GITHUB_SHA}" ]; then
- echo "**** Nothing to do, exiting build... **** "
- exit 1
- else
- echo "**** Changes found... incrementing build number version... ****"
- NB_RELEASE_NUMBER=$((NB_RELEASE_NUMBER + 1))
- VERSION_TAG=${IMAGE_VERSION}-nbxyz${NB_RELEASE_NUMBER}
- echo "VERSION_TAG=${VERSION_TAG}" >> $GITHUB_ENV
- fi
- else
- echo "**** New version ${WEBAPP_RELEASE} found; old version was ${IMAGE_VERSION}. Generating new webapp release... ****"
- VERSION_TAG=${WEBAPP_RELEASE}-nbxyz1
- echo "VERSION_TAG=${VERSION_TAG}" >> $GITHUB_ENV
- fi
-
- - name: Docker meta
- if: steps.version_check.outcome == 'success' && steps.version_check.conclusion == 'success'
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: netbootxyz/netbootxyz
- labels: |
- maintainer=antonym
- org.opencontainers.image.created=${{ env.GITHUB_DATE }}
- org.opencontainers.image.authors=netboot.xyz
- org.opencontainers.image.url=https://github.com/netbootxyz/docker-netbootxyz/packages
- org.opencontainers.image.documentation=https://netboot.xyz
- org.opencontainers.image.source=https://github.com/netbootxyz/docker-netbootxyz
- org.opencontainers.image.version=${{ env.VERSION_TAG }}
- org.opencontainers.image.revision=${{ env.GITHUB_SHA }}
- org.opencontainers.image.vendor=netboot.xyz
- org.opencontainers.image.licenses=Apache-2.0
- org.opencontainers.image.ref.name=${{ env.GITHUB_SHA }}
- org.opencontainers.image.title=netbootxyz
- org.opencontainers.image.description=netboot.xyz official docker container - Your favorite operating systems in one place. A network-based bootable operating system installer based on iPXE.
-
- - name: Build and push image
- if: steps.version_check.outcome == 'success' && steps.version_check.conclusion == 'success'
- uses: docker/build-push-action@v6
- with:
- push: true
- context: .
- file: ./Dockerfile
- platforms: linux/amd64,linux/arm64
- build-args: |
- WEBAPP_VERSION=${{ env.WEBAPP_RELEASE }}
- VERSION=${{ env.VERSION_TAG }}
- BUILD_DATE=${{ env.GITHUB_DATE }}
- tags: |
- netbootxyz/netbootxyz:latest
- netbootxyz/netbootxyz:${{ github.sha }}
- netbootxyz/netbootxyz:${{ env.VERSION_TAG }}
- ghcr.io/netbootxyz/netbootxyz:latest
- ghcr.io/netbootxyz/netbootxyz:${{ github.sha }}
- ghcr.io/netbootxyz/netbootxyz:${{ env.VERSION_TAG }}
- labels: ${{ steps.meta.outputs.labels }}
-
- - name: Bump version and push tag
- if: steps.version_check.outcome == 'success' && steps.version_check.conclusion == 'success'
- id: tag_version
- uses: anothrNick/github-tag-action@1.70.0
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- CUSTOM_TAG: ${{ env.VERSION_TAG }}
- WITH_V: true
- RELEASE_BRANCHES: master
|