diff --git a/.github/workflows/build-disk-collector.yml b/.github/workflows/build-disk-collector.yml index 7dd4896..0f0fe68 100644 --- a/.github/workflows/build-disk-collector.yml +++ b/.github/workflows/build-disk-collector.yml @@ -13,6 +13,9 @@ on: type: boolean default: false +env: + IMAGE: ghcr.io/crosstalk-solutions/project-nomad-disk-collector + jobs: check_authorization: name: Check authorization to publish new Docker image @@ -23,29 +26,70 @@ jobs: - name: check-auth id: check-auth run: echo "is_authorized=${{ contains(secrets.DEPLOYMENT_AUTHORIZED_USERS, github.triggering_actor) }}" >> $GITHUB_OUTPUT + build: - name: Build disk-collector image + name: Build Docker image (${{ matrix.platform }}) needs: check_authorization if: needs.check_authorization.outputs.isAuthorized == 'true' - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} permissions: contents: read packages: write + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-24.04 + suffix: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + suffix: arm64 steps: - name: Checkout code uses: actions/checkout@v6 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + uses: actions/checkout@v6 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push uses: docker/build-push-action@v5 with: context: install/sidecar-disk-collector push: true - tags: | - ghcr.io/crosstalk-solutions/project-nomad-disk-collector:${{ inputs.version }} - ghcr.io/crosstalk-solutions/project-nomad-disk-collector:v${{ inputs.version }} - ${{ inputs.tag_latest && 'ghcr.io/crosstalk-solutions/project-nomad-disk-collector:latest' || '' }} + platforms: ${{ matrix.platform }} + tags: ${{ env.IMAGE }}:${{ inputs.version }}-${{ matrix.suffix }} + + manifest: + name: Create multi-arch manifest + needs: build + runs-on: ubuntu-latest + permissions: + packages: write + steps: + - name: Log in to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create and push manifest + run: | + TAGS="${{ env.IMAGE }}:${{ inputs.version }} ${{ env.IMAGE }}:v${{ inputs.version }}" + if [ "${{ inputs.tag_latest }}" = "true" ]; then + TAGS="$TAGS ${{ env.IMAGE }}:latest" + fi + for TAG in $TAGS; do + docker manifest create "$TAG" \ + "${{ env.IMAGE }}:${{ inputs.version }}-amd64" \ + "${{ env.IMAGE }}:${{ inputs.version }}-arm64" + docker manifest push "$TAG" + done diff --git a/.github/workflows/build-primary-image.yml b/.github/workflows/build-primary-image.yml index a24e45f..ee45d75 100644 --- a/.github/workflows/build-primary-image.yml +++ b/.github/workflows/build-primary-image.yml @@ -13,6 +13,9 @@ on: type: boolean default: false +env: + IMAGE: ghcr.io/crosstalk-solutions/project-nomad + jobs: check_authorization: name: Check authorization to publish new Docker image @@ -23,32 +26,73 @@ jobs: - name: check-auth id: check-auth run: echo "is_authorized=${{ contains(secrets.DEPLOYMENT_AUTHORIZED_USERS, github.triggering_actor) }}" >> $GITHUB_OUTPUT + build: - name: Build Docker image + name: Build Docker image (${{ matrix.platform }}) needs: check_authorization if: needs.check_authorization.outputs.isAuthorized == 'true' - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} permissions: contents: read packages: write + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-24.04 + suffix: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + suffix: arm64 steps: - name: Checkout code uses: actions/checkout@v6 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + uses: actions/checkout@v6 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push uses: docker/build-push-action@v5 with: push: true - tags: | - ghcr.io/crosstalk-solutions/project-nomad:${{ inputs.version }} - ghcr.io/crosstalk-solutions/project-nomad:v${{ inputs.version }} - ${{ inputs.tag_latest && 'ghcr.io/crosstalk-solutions/project-nomad:latest' || '' }} + platforms: ${{ matrix.platform }} + tags: ${{ env.IMAGE }}:${{ inputs.version }}-${{ matrix.suffix }} build-args: | VERSION=${{ inputs.version }} BUILD_DATE=${{ github.event.workflow_run.created_at }} VCS_REF=${{ github.sha }} + + manifest: + name: Create multi-arch manifest + needs: build + runs-on: ubuntu-latest + permissions: + packages: write + steps: + - name: Log in to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create and push manifest + run: | + TAGS="${{ env.IMAGE }}:${{ inputs.version }} ${{ env.IMAGE }}:v${{ inputs.version }}" + if [ "${{ inputs.tag_latest }}" = "true" ]; then + TAGS="$TAGS ${{ env.IMAGE }}:latest" + fi + for TAG in $TAGS; do + docker manifest create "$TAG" \ + "${{ env.IMAGE }}:${{ inputs.version }}-amd64" \ + "${{ env.IMAGE }}:${{ inputs.version }}-arm64" + docker manifest push "$TAG" + done diff --git a/.github/workflows/build-sidecar-updater.yml b/.github/workflows/build-sidecar-updater.yml index 3508ca9..898c0f7 100644 --- a/.github/workflows/build-sidecar-updater.yml +++ b/.github/workflows/build-sidecar-updater.yml @@ -13,6 +13,9 @@ on: type: boolean default: false +env: + IMAGE: ghcr.io/crosstalk-solutions/project-nomad-sidecar-updater + jobs: check_authorization: name: Check authorization to publish new Docker image @@ -23,29 +26,70 @@ jobs: - name: check-auth id: check-auth run: echo "is_authorized=${{ contains(secrets.DEPLOYMENT_AUTHORIZED_USERS, github.triggering_actor) }}" >> $GITHUB_OUTPUT + build: - name: Build sidecar-updater image + name: Build Docker image (${{ matrix.platform }}) needs: check_authorization if: needs.check_authorization.outputs.isAuthorized == 'true' - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} permissions: contents: read packages: write + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-24.04 + suffix: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + suffix: arm64 steps: - name: Checkout code uses: actions/checkout@v6 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + uses: actions/checkout@v6 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push uses: docker/build-push-action@v5 with: context: install/sidecar-updater push: true - tags: | - ghcr.io/crosstalk-solutions/project-nomad-sidecar-updater:${{ inputs.version }} - ghcr.io/crosstalk-solutions/project-nomad-sidecar-updater:v${{ inputs.version }} - ${{ inputs.tag_latest && 'ghcr.io/crosstalk-solutions/project-nomad-sidecar-updater:latest' || '' }} + platforms: ${{ matrix.platform }} + tags: ${{ env.IMAGE }}:${{ inputs.version }}-${{ matrix.suffix }} + + manifest: + name: Create multi-arch manifest + needs: build + runs-on: ubuntu-latest + permissions: + packages: write + steps: + - name: Log in to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create and push manifest + run: | + TAGS="${{ env.IMAGE }}:${{ inputs.version }} ${{ env.IMAGE }}:v${{ inputs.version }}" + if [ "${{ inputs.tag_latest }}" = "true" ]; then + TAGS="$TAGS ${{ env.IMAGE }}:latest" + fi + for TAG in $TAGS; do + docker manifest create "$TAG" \ + "${{ env.IMAGE }}:${{ inputs.version }}-amd64" \ + "${{ env.IMAGE }}:${{ inputs.version }}-arm64" + docker manifest push "$TAG" + done diff --git a/README.md b/README.md index e2749d9..8d59a4a 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,8 @@ At it's core, however, N.O.M.A.D. is still very lightweight. For a barebones ins - OS: Debian-based (Ubuntu recommended) - Stable internet connection (required during install only) +*NOTE*: ARM images are community-contributed. Installing on ARM is not officially supported. + To run LLM's and other included AI tools: #### Optimal Specs @@ -144,4 +146,4 @@ sudo bash /opt/project-nomad/update_nomad.sh ###### Uninstall Script - Need to start fresh? Use the uninstall script to make your life easy. Note: this cannot be undone! ```bash curl -fsSL https://raw.githubusercontent.com/Crosstalk-Solutions/project-nomad/refs/heads/main/install/uninstall_nomad.sh -o uninstall_nomad.sh && sudo bash uninstall_nomad.sh -``` \ No newline at end of file +```