{
  "builder": {
    "id": ""
  },
  "buildType": "https://mobyproject.org/buildkit@v1",
  "materials": [
    {
      "uri": "pkg:docker/nginx@1.27-alpine?platform=linux%2Famd64",
      "digest": {
        "sha256": "61b1a4867a5ae766114a788e5bd5422883ed50a376763f2c623da4222aba2d81"
      }
    },
    {
      "uri": "pkg:docker/node@25-alpine?platform=linux%2Famd64",
      "digest": {
        "sha256": "bdf2cca6fe3dabd014ea60163eca3f0f7015fbd5c7ee1b0e9ccb4ced6eb02ef4"
      }
    }
  ],
  "invocation": {
    "configSource": {},
    "parameters": {
      "frontend": "dockerfile.v0",
      "args": {
        "label:com.docker.compose.project": "deploy",
        "label:com.docker.compose.service": "frontend",
        "label:com.docker.compose.version": "2.20.2"
      },
      "locals": [
        {
          "name": "context"
        },
        {
          "name": "dockerfile"
        }
      ]
    },
    "environment": {
      "platform": "linux/amd64"
    }
  },
  "buildConfig": {
    "llbDefinition": [
      {
        "id": "step0",
        "op": {
          "Op": {
            "source": {
              "identifier": "docker-image://docker.io/library/nginx:1.27-alpine"
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        }
      },
      {
        "id": "step1",
        "op": {
          "Op": {
            "source": {
              "identifier": "docker-image://docker.io/library/node:25-alpine@sha256:bdf2cca6fe3dabd014ea60163eca3f0f7015fbd5c7ee1b0e9ccb4ced6eb02ef4"
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        }
      },
      {
        "id": "step2",
        "op": {
          "Op": {
            "file": {
              "actions": [
                {
                  "input": 0,
                  "secondaryInput": -1,
                  "output": 0,
                  "Action": {
                    "mkdir": {
                      "path": "/workspace",
                      "mode": 493,
                      "makeParents": true,
                      "timestamp": -1
                    }
                  }
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step1:0"
        ]
      },
      {
        "id": "step3",
        "op": {
          "Op": {
            "source": {
              "identifier": "local://context",
              "attrs": {
                "local.sharedkeyhint": "context"
              }
            }
          },
          "constraints": {}
        }
      },
      {
        "id": "step4",
        "op": {
          "Op": {
            "file": {
              "actions": [
                {
                  "input": 0,
                  "secondaryInput": 1,
                  "output": 0,
                  "Action": {
                    "copy": {
                      "src": "/package*.json",
                      "dest": "/workspace/",
                      "mode": -1,
                      "followSymlink": true,
                      "dirCopyContents": true,
                      "createDestPath": true,
                      "allowWildcard": true,
                      "allowEmptyWildcard": true,
                      "timestamp": -1
                    }
                  }
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step2:0",
          "step3:0"
        ]
      },
      {
        "id": "step5",
        "op": {
          "Op": {
            "exec": {
              "meta": {
                "args": [
                  "/bin/sh",
                  "-c",
                  "npm install"
                ],
                "env": [
                  "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                  "NODE_VERSION=25.9.0",
                  "YARN_VERSION=1.22.22"
                ],
                "cwd": "/workspace",
                "removeMountStubsRecursive": true
              },
              "mounts": [
                {
                  "input": 0,
                  "dest": "/",
                  "output": 0
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step4:0"
        ]
      },
      {
        "id": "step6",
        "op": {
          "Op": {
            "file": {
              "actions": [
                {
                  "input": 0,
                  "secondaryInput": 1,
                  "output": 0,
                  "Action": {
                    "copy": {
                      "src": "/",
                      "dest": "/workspace/",
                      "mode": -1,
                      "followSymlink": true,
                      "dirCopyContents": true,
                      "createDestPath": true,
                      "allowWildcard": true,
                      "allowEmptyWildcard": true,
                      "timestamp": -1
                    }
                  }
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step5:0",
          "step3:0"
        ]
      },
      {
        "id": "step7",
        "op": {
          "Op": {
            "exec": {
              "meta": {
                "args": [
                  "/bin/sh",
                  "-c",
                  "npm run build"
                ],
                "env": [
                  "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                  "NODE_VERSION=25.9.0",
                  "YARN_VERSION=1.22.22"
                ],
                "cwd": "/workspace",
                "removeMountStubsRecursive": true
              },
              "mounts": [
                {
                  "input": 0,
                  "dest": "/",
                  "output": 0
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step6:0"
        ]
      },
      {
        "id": "step8",
        "op": {
          "Op": {
            "file": {
              "actions": [
                {
                  "input": 0,
                  "secondaryInput": 1,
                  "output": 0,
                  "Action": {
                    "copy": {
                      "src": "/workspace/dist",
                      "dest": "/usr/share/nginx/html",
                      "mode": -1,
                      "followSymlink": true,
                      "dirCopyContents": true,
                      "createDestPath": true,
                      "allowWildcard": true,
                      "allowEmptyWildcard": true,
                      "timestamp": -1
                    }
                  }
                }
              ]
            }
          },
          "platform": {
            "Architecture": "amd64",
            "OS": "linux"
          },
          "constraints": {}
        },
        "inputs": [
          "step0:0",
          "step7:0"
        ]
      },
      {
        "id": "step9",
        "op": {
          "Op": null
        },
        "inputs": [
          "step8:0"
        ]
      }
    ],
    "digestMapping": {
      "sha256:18cef7b5b73a7c64544b702fdde62c80e18a064a4bfabde903c1aa91514639d6": "step1",
      "sha256:30e0ec3df17a968b22c9a20db4035f03d411d2c17ba9a4b39f33b65f5e9d7ecf": "step7",
      "sha256:391c02c997d3a7e65f1a996e41717b5d59f2e91c5c77c47faaf2af500453e6c8": "step9",
      "sha256:47c7149cab903b3bcfdb0d8ad3cc46090731e80d7fc6669d9680e58ff13599bb": "step3",
      "sha256:615653393d53a6a2800c530f63b0baf10ee895490689b64873a4b83335ff5dcd": "step2",
      "sha256:8d7cce6bf804edb21d06edf9d5ff065ff995517b388db7d8076f3c2a8dd1d4ad": "step6",
      "sha256:a0efb6260ae4ecc20b6ee4f78ab01c1a07cb5d919bf99e5beca4ad7ed04371df": "step0",
      "sha256:ad0f8ef265491861444c95a34818a3a211d16121ce5a08d2a5e22631b60271c6": "step8",
      "sha256:ba8fac4f07cb12c51a6dde068c9ace8ef154fb5001b2ec101a2e928e1a035360": "step4",
      "sha256:bd2529d3edf61e031aeeb08cec3a2fb58d0a59e0c52b873d7d61b82450693e15": "step5"
    }
  },
  "metadata": {
    "buildInvocationID": "pvll6twvfqfmmpht1irop53qt",
    "buildStartedOn": "2026-05-12T16:57:01.313886643+08:00",
    "buildFinishedOn": "2026-05-12T16:57:17.590903018+08:00",
    "completeness": {
      "parameters": true,
      "environment": true,
      "materials": false
    },
    "reproducible": false,
    "https://mobyproject.org/buildkit@v1#metadata": {
      "source": {
        "locations": {
          "step0": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 8
                    },
                    "end": {
                      "line": 8
                    }
                  }
                ]
              }
            ]
          },
          "step1": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 1
                    },
                    "end": {
                      "line": 1
                    }
                  }
                ]
              }
            ]
          },
          "step2": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 2
                    },
                    "end": {
                      "line": 2
                    }
                  }
                ]
              }
            ]
          },
          "step3": {},
          "step4": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 3
                    },
                    "end": {
                      "line": 3
                    }
                  }
                ]
              }
            ]
          },
          "step5": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 4
                    },
                    "end": {
                      "line": 4
                    }
                  }
                ]
              }
            ]
          },
          "step6": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 5
                    },
                    "end": {
                      "line": 5
                    }
                  }
                ]
              }
            ]
          },
          "step7": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 6
                    },
                    "end": {
                      "line": 6
                    }
                  }
                ]
              }
            ]
          },
          "step8": {
            "locations": [
              {
                "ranges": [
                  {
                    "start": {
                      "line": 9
                    },
                    "end": {
                      "line": 9
                    }
                  }
                ]
              }
            ]
          }
        },
        "infos": [
          {
            "filename": "Dockerfile",
            "data": "RlJPTSBub2RlOjI1LWFscGluZSBBUyBidWlsZApXT1JLRElSIC93b3Jrc3BhY2UKQ09QWSBwYWNrYWdlKi5qc29uIC4vClJVTiBucG0gaW5zdGFsbApDT1BZIC4gLgpSVU4gbnBtIHJ1biBidWlsZAoKRlJPTSBuZ2lueDoxLjI3LWFscGluZQpDT1BZIC0tZnJvbT1idWlsZCAvd29ya3NwYWNlL2Rpc3QgL3Vzci9zaGFyZS9uZ2lueC9odG1sCkVYUE9TRSA4MAoK",
            "llbDefinition": [
              {
                "id": "step0",
                "op": {
                  "Op": {
                    "source": {
                      "identifier": "local://dockerfile",
                      "attrs": {
                        "local.differ": "none",
                        "local.followpaths": "[\"Dockerfile\",\"Dockerfile.dockerignore\",\"dockerfile\"]",
                        "local.sharedkeyhint": "dockerfile"
                      }
                    }
                  },
                  "constraints": {}
                }
              },
              {
                "id": "step1",
                "op": {
                  "Op": null
                },
                "inputs": [
                  "step0:0"
                ]
              }
            ],
            "digestMapping": {
              "sha256:3b597f8022fe101e09abb75d852671d5a58d2960ddb60d0e89af3a0dfc285d9f": "step0",
              "sha256:a20242830624fc07210d229075c94bc65206c9cc5f12c22a27348fa4095a28de": "step1"
            }
          }
        ]
      },
      "layers": {
        "step0:0": [
          [
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:08000c18d16dadf9553d747a58cf44023423a9ab010aab96cf263d2216b8b350",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:d71eae0084c1aa823dd8fb2ecf8604d5c0f4911226c042bb1f8297e819f4b192",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:c56f134d380585340a68d0db2f2c170641a1c0ff72ccf2438cf2f693df756a85",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:e244aa659f612a80c40dd8645812301e3def6b15ec67b9e486ed2201172b51d1",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:b8d7d1d2263425d6044e059b2810017d062d659b9b755241f3747eda77726250",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:811a4dbbf4a5309e4390cf655c12db92e1a4304fb9d9731f83e7b02e95a617c6",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:947e805a4ac71f68e6703550c0b36c2aa2e554c4fa670ca2da6a25c6d7dccb66",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:0d853d50b128aa460b47e7121849463a14b18d4fd976caf5014744aae24d28aa",
              "size": -1
            }
          ]
        ],
        "step1:0": [
          [
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:2bbc958bba5a4f9004b9e5cb80beafef0cda986940f34c247c1dac0136171855",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:8be1d28e4b22a4b137e4303f95138cc74d9dc2e70174e76e06d78f619672df64",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:5aa8cd3ad20ecd070d9ade075566fafd9257c4cbc5272cd271e8775e6fa41717",
              "size": -1
            }
          ]
        ],
        "step2:0": [
          []
        ],
        "step3:0": [
          []
        ],
        "step4:0": [
          []
        ],
        "step5:0": [
          []
        ],
        "step6:0": [
          []
        ],
        "step7:0": [
          []
        ],
        "step8:0": [
          [
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:08000c18d16dadf9553d747a58cf44023423a9ab010aab96cf263d2216b8b350",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:d71eae0084c1aa823dd8fb2ecf8604d5c0f4911226c042bb1f8297e819f4b192",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:c56f134d380585340a68d0db2f2c170641a1c0ff72ccf2438cf2f693df756a85",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:e244aa659f612a80c40dd8645812301e3def6b15ec67b9e486ed2201172b51d1",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:b8d7d1d2263425d6044e059b2810017d062d659b9b755241f3747eda77726250",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:811a4dbbf4a5309e4390cf655c12db92e1a4304fb9d9731f83e7b02e95a617c6",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:947e805a4ac71f68e6703550c0b36c2aa2e554c4fa670ca2da6a25c6d7dccb66",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:0d853d50b128aa460b47e7121849463a14b18d4fd976caf5014744aae24d28aa",
              "size": -1
            },
            {
              "mediaType": "application/vnd.docker.image.rootfs.diff.tar",
              "digest": "sha256:cd2ba36d8a2d75d224865bc1fb07d98a3dd6703c3cc83e1c57ba51d11b103921",
              "size": -1
            }
          ]
        ]
      }
    }
  }
}