| name: Docker Build and Publish |
|
|
| on: |
| push: |
| branches: [main] |
| pull_request: |
| branches: [main] |
| release: |
| types: [published] |
|
|
| permissions: |
| contents: read |
|
|
| concurrency: |
| group: docker-${{ github.ref }} |
| cancel-in-progress: true |
|
|
| jobs: |
| build-and-push: |
| |
| if: github.repository == 'NousResearch/hermes-agent' |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| with: |
| submodules: recursive |
|
|
| - name: Set up QEMU |
| uses: docker/setup-qemu-action@v3 |
|
|
| - name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
|
|
| |
| |
| |
| - name: Build image (amd64, smoke test) |
| uses: docker/build-push-action@v6 |
| with: |
| context: . |
| file: Dockerfile |
| load: true |
| platforms: linux/amd64 |
| tags: nousresearch/hermes-agent:test |
| cache-from: type=gha |
| cache-to: type=gha,mode=max |
|
|
| - name: Test image starts |
| run: | |
| docker run --rm \ |
| -v /tmp/hermes-test:/opt/data \ |
| --entrypoint /opt/hermes/docker/entrypoint.sh \ |
| nousresearch/hermes-agent:test --help |
| |
| - name: Log in to Docker Hub |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' |
| uses: docker/login-action@v3 |
| with: |
| username: ${{ secrets.DOCKERHUB_USERNAME }} |
| password: ${{ secrets.DOCKERHUB_TOKEN }} |
|
|
| - name: Push multi-arch image (main branch) |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' |
| uses: docker/build-push-action@v6 |
| with: |
| context: . |
| file: Dockerfile |
| push: true |
| platforms: linux/amd64,linux/arm64 |
| tags: nousresearch/hermes-agent:latest |
| cache-from: type=gha |
| cache-to: type=gha,mode=max |
|
|
| - name: Push multi-arch image (release) |
| if: github.event_name == 'release' |
| uses: docker/build-push-action@v6 |
| with: |
| context: . |
| file: Dockerfile |
| push: true |
| platforms: linux/amd64,linux/arm64 |
| tags: nousresearch/hermes-agent:${{ github.event.release.tag_name }} |
| cache-from: type=gha |
| cache-to: type=gha,mode=max |
|
|