hanabhi/gridworld-env
0
1name: Build and Push Docker Images2 3on:4 push:5 branches:6 - main7 paths:8 - 'envs/**/Dockerfile'9 - 'envs/**/*.py'10 - '.github/workflows/docker-build.yml'11 workflow_dispatch: # Allow manual trigger12 13env:14 REGISTRY: ghcr.io15 IMAGE_PREFIX: ${{ github.repository_owner }}/openenv16 17jobs:18 # Job 1: Build base image first19 build-base:20 runs-on: ubuntu-latest21 permissions:22 contents: read23 packages: write24 25 steps:26 - name: Checkout code27 uses: actions/checkout@v428 29 - name: Set up Docker Buildx30 uses: docker/setup-buildx-action@v331 32 - name: Log in to GHCR33 uses: docker/login-action@v334 with:35 registry: ${{ env.REGISTRY }}36 username: ${{ github.actor }}37 password: ${{ secrets.GITHUB_TOKEN }}38 39 - name: Extract metadata for base image40 id: meta41 uses: docker/metadata-action@v542 with:43 images: ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-base44 tags: |45 type=raw,value=latest,enable={{is_default_branch}}46 type=sha47 48 - name: Build and push base image49 uses: docker/build-push-action@v550 with:51 context: .52 file: src/openenv/core/containers/images/Dockerfile53 push: true54 platforms: linux/amd64,linux/arm6455 tags: ${{ steps.meta.outputs.tags }}56 labels: ${{ steps.meta.outputs.labels }}57 cache-from: type=gha,scope=base58 cache-to: type=gha,mode=max,scope=base59 # Job 2: Build environment images (depends on base)60 build-envs:61 runs-on: ubuntu-latest62 needs: build-base # Wait for base image to be built63 permissions:64 contents: read65 packages: write66 67 strategy:68 matrix:69 image:70 - name: echo-env71 dockerfile: envs/echo_env/server/Dockerfile72 context: envs/echo_env73 - name: chat-env74 dockerfile: envs/chat_env/server/Dockerfile75 context: envs/chat_env76 - name: coding-env77 dockerfile: envs/coding_env/server/Dockerfile78 - name: sumo-rl-env79 dockerfile: envs/sumo_rl_env/server/Dockerfile80 context: envs/sumo_rl_env81 - name: atari-env82 dockerfile: envs/atari_env/server/Dockerfile83 context: envs/atari_env84 - name: git-env85 dockerfile: envs/git_env/server/Dockerfile86 context: envs/git_env87 - name: connect4_env88 dockerfile: envs/connect4_env/server/Dockerfile89 context: envs/connect4_env90 - name: chess-env91 dockerfile: envs/chess_env/server/Dockerfile92 context: envs/chess_env93 - name: tbench2-env94 dockerfile: envs/tbench2_env/server/Dockerfile95 context: envs/tbench2_env96 - name: textarena-env97 dockerfile: envs/textarena_env/server/Dockerfile98 context: envs/textarena_env99 - name: browsergym-env100 dockerfile: envs/browsergym_env/server/Dockerfile101 context: envs/browsergym_env102 - name: snake-env103 dockerfile: envs/snake_env/server/Dockerfile104 context: envs/snake_env105 - name: unity-env106 dockerfile: envs/unity_env/server/Dockerfile107 context: envs/unity_env108 - name: openapp-env109 dockerfile: envs/openapp_env/server/Dockerfile110 context: envs/openapp_env111 - name: maze-env112 dockerfile: envs/maze_env/server/Dockerfile113 context: envs/maze_env114 - name: openspiel-env115 dockerfile: envs/openspiel_env/server/Dockerfile116 context: envs/openspiel_env117 118 steps:119 - name: Checkout code120 uses: actions/checkout@v4121 122 - name: Set up Docker Buildx123 uses: docker/setup-buildx-action@v3124 125 - name: Log in to GHCR126 uses: docker/login-action@v3127 with:128 registry: ${{ env.REGISTRY }}129 username: ${{ github.actor }}130 password: ${{ secrets.GITHUB_TOKEN }}131 132 - name: Extract metadata133 id: meta134 uses: docker/metadata-action@v5135 with:136 images: ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-${{ matrix.image.name }}137 tags: |138 type=raw,value=latest,enable={{is_default_branch}}139 type=sha140 141 - name: Build and push environment image142 uses: docker/build-push-action@v5143 with:144 context: ${{ matrix.image.context || '.' }}145 file: ${{ matrix.image.dockerfile }}146 push: true147 platforms: linux/amd64,linux/arm64148 tags: ${{ steps.meta.outputs.tags }}149 labels: ${{ steps.meta.outputs.labels }}150 cache-from: type=gha,scope=${{ matrix.image.name }}151 cache-to: type=gha,mode=max,scope=${{ matrix.image.name }}152 build-args: |153 BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}-base:latest154 