From c9ddf5a1ac928745c802eb841b4e3eb5aa3fb12a Mon Sep 17 00:00:00 2001 From: Illia Vysochyn Date: Mon, 1 Jul 2024 18:03:12 +0200 Subject: [PATCH] [#61287] workflows: Build and publish ORFS image Signed-off-by: Illia Vysochyn --- .../github-actions-publish-docker-images.yml | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 .github/workflows/github-actions-publish-docker-images.yml diff --git a/.github/workflows/github-actions-publish-docker-images.yml b/.github/workflows/github-actions-publish-docker-images.yml new file mode 100644 index 0000000000..c35be1e746 --- /dev/null +++ b/.github/workflows/github-actions-publish-docker-images.yml @@ -0,0 +1,131 @@ +name: Build and publish ORFS images +on: + push: + paths: + - etc/DependencyInstaller.sh + - etc/DockerHelper.sh + - .github/workflows/github-actions-publish-docker-images.yml + - build_openroad.sh + - env.sh + - flow/Makefile + - docker/Dockerfile.dev + - docker/Dockerfile.builder + pull_request: + paths: + - etc/DependencyInstaller.sh + - etc/DockerHelper.sh + - .github/workflows/github-actions-publish-docker-images.yml + - build_openroad.sh + - env.sh + - flow/Makefile + - docker/Dockerfile.dev + - docker/Dockerfile.builder + +jobs: + buildDependenciesImage: + strategy: + fail-fast: false + matrix: + os: [["ubuntu20.04", "ubuntu:20.04"], ["ubuntu22.04", "ubuntu:22.04"]] + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v3 + with: + fetch-depth: 1 + submodules: recursive + + - name: Set environment variables + run: | + echo "IMAGE_DEPS=ghcr.io/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')-dev/${{ matrix.os[0] }}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry (GHCR) + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: gha + password: ${{ github.token }} + + - name: Copy OpenROAD installer + run: cp tools/OpenROAD/etc/DependencyInstaller.sh etc/InstallerOpenROAD.sh + + - name: Build and export dependencies image + uses: docker/build-push-action@v6 + with: + context: etc + push: true + tags: ${{ env.IMAGE_DEPS }}:latest + file: docker/Dockerfile.dev + build-args: | + fromImage=${{ matrix.os[1] }} + numThreads=$(nproc) + cache-from: type=registry,ref=${{ env.IMAGE_DEPS }}:buildcache + cache-to: type=registry,ref=${{ env.IMAGE_DEPS }}:buildcache,mode=max + + buildORFSImage: + needs: buildDependenciesImage + strategy: + fail-fast: false + matrix: + os: ["ubuntu20.04", "ubuntu22.04"] + runs-on: ubuntu-latest + steps: + - name: Free Disk Space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + + - name: Check out repository code + uses: actions/checkout@v3 + with: + fetch-depth: 1 + submodules: recursive + + - name: Set environment variables + run: | + echo "IMAGE=ghcr.io/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')/${{ matrix.os }}" >> $GITHUB_ENV + echo "IMAGE_DEPS=ghcr.io/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')-dev/${{ matrix.os }}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # We don't use the build-push-action here because it hangs + - name: Build ORFS image + run: | + docker buildx build \ + --load \ + --build-arg fromImage=${{ env.IMAGE_DEPS }}:latest \ + --build-arg numThreads=$(nproc) \ + --cache-from type=registry,ref=${{ env.IMAGE }}:buildcache \ + --tag ${{ env.IMAGE }}:latest \ + --file docker/Dockerfile.builder \ + . + + - name: Test build + run: | + cmd="source ./env.sh && yosys -help && openroad -help && make -C flow ;" + docker run ${{ env.IMAGE }}:latest /bin/bash -c "${cmd}" + + - name: Login to GitHub Container Registry (GHCR) + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: gha + password: ${{ github.token }} + + - name: Export ORFS image + run: | + docker buildx build \ + --build-arg fromImage=${{ env.IMAGE_DEPS }}:latest \ + --build-arg numThreads=$(nproc) \ + --cache-from type=registry,ref=${{ env.IMAGE }}:buildcache \ + --cache-to type=registry,ref=${{ env.IMAGE }}:buildcache,mode=max \ + --tag ${{ env.IMAGE }}:latest \ + --file docker/Dockerfile.builder \ + --push \ + .