From 74b072e2d54ef31ea932658edbdfe4b0ac9b465d Mon Sep 17 00:00:00 2001 From: Danilo Tuler Date: Wed, 16 Aug 2023 13:28:52 -0300 Subject: [PATCH] feat(machine-download): docker image to download machines from IPFS --- .github/workflows/machine-download.yaml | 69 +++++++++++++++++++ packages/machine-download/Dockerfile | 5 ++ packages/machine-download/README.md | 13 ++++ packages/machine-download/docker-bake.hcl | 6 ++ .../machine-download/docker-bake.override.hcl | 3 + .../docker-bake.platforms.hcl | 6 ++ packages/machine-download/package.json | 8 +++ 7 files changed, 110 insertions(+) create mode 100644 .github/workflows/machine-download.yaml create mode 100644 packages/machine-download/Dockerfile create mode 100644 packages/machine-download/README.md create mode 100644 packages/machine-download/docker-bake.hcl create mode 100644 packages/machine-download/docker-bake.override.hcl create mode 100644 packages/machine-download/docker-bake.platforms.hcl create mode 100644 packages/machine-download/package.json diff --git a/.github/workflows/machine-download.yaml b/.github/workflows/machine-download.yaml new file mode 100644 index 0000000..ef866c4 --- /dev/null +++ b/.github/workflows/machine-download.yaml @@ -0,0 +1,69 @@ +name: machine-download +on: + workflow_call: + pull_request: + paths: + - .github/workflows/machine-download.yaml + - packages/machine-download/** +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +permissions: + contents: read + packages: write + id-token: write + actions: write +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Get package tag/version + id: package-version + if: ${{ github.event_name == 'push' }} + run: | + jq -r '"PACKAGE_VERSION=\(.version)"' packages/machine-download/package.json >> "$GITHUB_OUTPUT" + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + docker.io/cartesi/machine-download,enable=${{ github.event_name != 'pull_request' }} + ghcr.io/cartesi/machine-download + tags: | + type=raw,value=${{ steps.package-version.outputs.PACKAGE_VERSION }},enable=${{ github.event_name == 'push' }} + type=ref,event=pr + labels: | + org.opencontainers.image.title=Cartesi Machine Download + org.opencontainers.image.description=Cartesi Machine Download from IPFS + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - uses: depot/setup-action@v1 + - name: Build and push + uses: depot/bake-action@v1 + with: + project: ${{ vars.DEPOT_PROJECT }} + workdir: packages/machine-download + files: | + ./docker-bake.hcl + ./docker-bake.platforms.hcl + ${{ steps.meta.outputs.bake-file }} + push: true diff --git a/packages/machine-download/Dockerfile b/packages/machine-download/Dockerfile new file mode 100644 index 0000000..93b136f --- /dev/null +++ b/packages/machine-download/Dockerfile @@ -0,0 +1,5 @@ +FROM golang:1.20-bookworm as builder +RUN go install github.com/ipfs/ipget@latest + +FROM debian:bookworm-20230725 +COPY --from=builder /go/bin/ipget /usr/local/bin/ diff --git a/packages/machine-download/README.md b/packages/machine-download/README.md new file mode 100644 index 0000000..0ff2972 --- /dev/null +++ b/packages/machine-download/README.md @@ -0,0 +1,13 @@ +# Cartesi Machine Download + +This Docker image provides an utility to download Cartesi Machines stored in IFPS using the [CAR](https://ipld.io/specs/transport/car/carv1/) format, and extracting to a local folder. + +## Usage + +The following command will download the Cartesi Machine with the given hash and extract it to the given folder: + +```shell +docker run -t cartesi/machine-download:devel bafybeibdpcfqtcqhgjzmo5wzi3kraxdu6f4wm2hzna4tj2enkepzvldjtq /tmp +``` + +Obviously, the output directory can be in a volume mapped to outside the docker container. diff --git a/packages/machine-download/docker-bake.hcl b/packages/machine-download/docker-bake.hcl new file mode 100644 index 0000000..d71acab --- /dev/null +++ b/packages/machine-download/docker-bake.hcl @@ -0,0 +1,6 @@ +target "docker-metadata-action" {} +target "docker-platforms" {} + +target "default" { + inherits = ["docker-metadata-action", "docker-platforms"] +} diff --git a/packages/machine-download/docker-bake.override.hcl b/packages/machine-download/docker-bake.override.hcl new file mode 100644 index 0000000..704c02c --- /dev/null +++ b/packages/machine-download/docker-bake.override.hcl @@ -0,0 +1,3 @@ +target "default" { + tags = ["cartesi/machine-download:devel"] +} diff --git a/packages/machine-download/docker-bake.platforms.hcl b/packages/machine-download/docker-bake.platforms.hcl new file mode 100644 index 0000000..40168da --- /dev/null +++ b/packages/machine-download/docker-bake.platforms.hcl @@ -0,0 +1,6 @@ +target "docker-platforms" { + platforms = [ + "linux/amd64", + "linux/arm64" + ] +} diff --git a/packages/machine-download/package.json b/packages/machine-download/package.json new file mode 100644 index 0000000..8b20d25 --- /dev/null +++ b/packages/machine-download/package.json @@ -0,0 +1,8 @@ +{ + "name": "@cartesi/machine-download", + "private": true, + "version": "0.1.0", + "scripts": { + "build": "docker buildx bake" + } +}