# Copyright 2021 SkyWater PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache 2.0

name: Build Docker Image for Run DRC for cell GDS (using Magic) Action

on:
  workflow_dispatch:
  push:

jobs:
  prebuild-magic-gds-drc:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Set Action Name
      run: echo "ACTION_NAME=run-drc-for-cell-gds-using-magic" >> $GITHUB_ENV

    - name: Login to GitHub Container Registry
      uses: docker/login-action@v1
      with:
        registry: ghcr.io
        username: ${{ github.repository_owner }}
        password: ${{ github.token }}

    - name: Build and push
      uses: docker/build-push-action@v2
      with:
        context: ${{ env.ACTION_NAME }}
        file: ${{ env.ACTION_NAME }}/Dockerfile
        push: true
        tags: ghcr.io/${{ github.repository }}-${{ env.ACTION_NAME }}:latest

    - name: Image digest
      run: echo ${{ steps.docker_build.outputs.digest }}
