Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support more platforms in orangeopensource/hurl Docker image #536

Closed
humphd opened this issue Apr 4, 2022 · 23 comments
Closed

Support more platforms in orangeopensource/hurl Docker image #536

humphd opened this issue Apr 4, 2022 · 23 comments
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@humphd
Copy link

humphd commented Apr 4, 2022

I'm using hurl on an M1 Mac, and using the Docker image assumes I'm on amd64:

$ docker run --rm orangeopensource/hurl --version
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
hurl 1.6.1 libcurl/7.81.0-DEV OpenSSL/1.1.1n zlib/1.2.12

I can get around it by explicitly opting into the amd64 arch:

$ docker run --platform=linux/amd64 --rm orangeopensource/hurl --version
hurl 1.6.1 libcurl/7.81.0-DEV OpenSSL/1.1.1n zlib/1.2.12

But it would be great if the image was built for more --platforms, especially linux/arm64/v8. I don't know about the Rust part, but doing this in the Dockerfile is a matter of:

FROM --platform=${BUILDPLATFORM} alpine:3.15 AS builder
...
FROM --platform=${BUILDPLATFORM} alpine:3.15 AS runner

Then when you build using buildx, you can specify your platform(s), see https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images. Your base images (alpine) already do this, so it will just work.

Automating this in CI would look something like:

jobs:
  docker:
    steps:
      - uses: actions/checkout@v2
      - uses: docker/setup-qemu-action@v1
      - uses: docker/setup-buildx-action@v1
      - uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
      - uses: docker/build-push-action@v2
        env:
          DOCKER_REPO: orangeopensource/hurl
          VERSION_TAG: ${{ github.ref_name }}
          SHA_TAG: sha-${{ github.sha }}
        with:
          context: .
          platforms: linux/amd64, linux/arm64v8 # add others as desired
          tags: ${{ env.DOCKER_REPO }}:${{ env.VERSION_TAG }}, ${{ env.DOCKER_REPO }}:${{ env.SHA_TAG }}, ${{ env.DOCKER_REPO }}:latest
          push: true

This could be done on every release or tag event.

@humphd humphd changed the title Support more platforms orangeopensource/hurl in Docker image Support more platforms in orangeopensource/hurl Docker image Apr 4, 2022
@jcamiel
Copy link
Collaborator

jcamiel commented Apr 8, 2022

Hi @humphd thanks for your feedback!

We've added a new Docker arm64 flavour image in https://hub.docker.com/r/orangeopensource/hurl.
Would you be kind to test it on an M1 and tell us if is it ok?
Currently, we are releasing our packaged versions manually (brew, chocolate, scoops docker etc...). It's quite cumbersome and not error proof, so we're going to automate these deliveries soon (certainly with GitHub actions). I keep your input/proposal in mind and we'll use it as soon as we've automated this releases.

Thanks again,

jc

@humphd
Copy link
Author

humphd commented Apr 8, 2022

Thanks for working on this, it's appreciated. I tested and on my M1 I still have some issues:

docker run --rm orangeopensource/hurl:latest --version
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
hurl 1.6.1 libcurl/7.81.0-DEV OpenSSL/1.1.1n zlib/1.2.12

I tried specifying the platform, which for me is linux/arm64/v8. I tried a few variants:

docker run --rm --platform=linux/arm64 orangeopensource/hurl:latest --version
Unable to find image 'orangeopensource/hurl:latest' locally
latest: Pulling from orangeopensource/hurl
9981e73032c8: Already exists
a1012993103d: Pull complete
b6b3660027ca: Pull complete
980ab9760d29: Pull complete
d65f4a13f51d: Pull complete
Digest: sha256:ee558443639c3863dd1e12ff58c8c330e0a3214d2841d46a972eeb082e5a30ce
Status: Downloaded newer image for orangeopensource/hurl:latest
qemu-x86_64: Could not open '/lib/ld-musl-x86_64.so.1': No such file or directory

And for the more specific one, which I have:

docker run --rm --platform=linux/arm64/v8 orangeopensource/hurl:latest --version
qemu-x86_64: Could not open '/lib/ld-musl-x86_64.so.1': No such file or directory

@jcamiel
Copy link
Collaborator

jcamiel commented Apr 8, 2022

Ok I’ll try to build and test it on an M1 to see if we can solve it!

@lepapareil lepapareil self-assigned this Apr 11, 2022
@lepapareil lepapareil added the enhancement New feature or request label Apr 11, 2022
@lepapareil
Copy link
Collaborator

lepapareil commented Apr 11, 2022

I guys, here are the steps I followed (on ubuntu22):

Dockerfile:

FROM --platform=${BUILDPLATFORM} alpine:3.15 AS builder
ARG TARGETPLATFORM
ARG BUILDPLATFORM
RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM"
WORKDIR /tmp
ARG hurl_latest_version
RUN apk add git jq curl cargo gcc libffi-dev libxml2-dev libxml2-utils openssl-dev
RUN git clone --quiet --depth 1 --branch ${hurl_latest_version} https://github.com/Orange-OpenSource/hurl.git
WORKDIR /tmp/hurl
RUN cargo build --release --verbose --bin hurl

FROM --platform=${BUILDPLATFORM} alpine:3.15 AS runner
ARG docker_build_date
ARG hurl_latest_version
LABEL "com.orange.hurl.created"="${docker_build_date}"
LABEL "com.orange.hurl.authors"="Fabrice REIX, Jean Christophe AMIEL, Orange-OpenSource"
LABEL "com.orange.hurl.url"="https://hurl.dev"
LABEL "com.orange.hurl.documentation"="https://hurl.dev"
LABEL "com.orange.hurl.source"="https://github.com/Orange-OpenSource/hurl"
LABEL "com.orange.hurl.version"=${hurl_latest_version}
LABEL "com.orange.hurl.vendor"="Orange-OpenSource"
LABEL "com.orange.hurl.licenses"="Apache-2.0"
LABEL "com.orange.hurl.title"="Hurl"
LABEL "com.orange.hurl.description"="Hurl is a command line tool that runs HTTP requests defined in a simple plain text format"
LABEL "com.orange.hurl.base.name"="alpine:3.15"
COPY --from=builder /tmp/hurl/target/release/hurl /usr/bin/
COPY --from=builder /usr/lib/libxml2.so.2 /usr/lib/
COPY --from=builder /usr/lib/libgcc_s.so.1 /usr/lib/
COPY --from=builder /usr/lib/liblzma.so.5 /usr/lib/
ENTRYPOINT ["/usr/bin/hurl"]

Buildx prerequisites:

$ docker run --privileged --rm tonistiigi/binfmt --install all
$ docker buildx rm builder
$ docker buildx create --name builder --driver docker-container --use
$ docker buildx inspect --bootstrap

Name:   builder
Driver: docker-container

Nodes:
Name:      builder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

Buildx/push command:

$ cd hurl/contrib/docker
$ hurl_latest_version=$(curl --silent "https://api.github.com/repos/Orange-OpenSource/hurl/releases/latest" | jq -r .tag_name)
$ docker_build_date=$(date "+%Y-%m-%d %H-%M-%S")
$ docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64 --build-arg docker_build_date="${docker_build_date}" --build-arg hurl_latest_version=${hurl_latest_version} --tag orangeopensource/hurl:latest --tag orangeopensource/hurl:${hurl_latest_version} --push .

I get 3 parallel builds as expected:

image

When I inspect pushed manifests I get 3 platforms as expected:

$ docker buildx imagetools inspect orangeopensource/hurl:latest

Name:      docker.io/orangeopensource/hurl:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:7504ebc912cb288f0b6a144ebaeb9fd23ba7c54a3097ed0ab96c3650d5fafff5

Manifests:
  Name:      docker.io/orangeopensource/hurl:latest@sha256:7ff7b4e744417783cec1ec9d2379892afe8e9ca5678a219920b81ec3b98c6b14
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/amd64

  Name:      docker.io/orangeopensource/hurl:latest@sha256:40e62a19bd4ce4b031b1d9ad721de4478c3140e788a117e7e7fff492bd31f216
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm/v7

  Name:      docker.io/orangeopensource/hurl:latest@sha256:a2701172f41f8e4a94f78d4dd944faee434d2657ba0bc1c5bda1b105a977531a
  MediaType: application/vnd.docker.distribution.manifest.v2+json
  Platform:  linux/arm64

@jcamiel
Copy link
Collaborator

jcamiel commented Apr 26, 2022

I've secured a MBP M1 🎉, so we'll able to test and fix this issue soon (normally)!

@lepapareil
Copy link
Collaborator

I also just got a pi4 😄

@softprops
Copy link

+1 I'd like to be able to use this on an amazon linux container running on arm

@jcamiel
Copy link
Collaborator

jcamiel commented Feb 2, 2023

@lepapareil more info on "Multi-platform images" on Docker doc https://docs.docker.com/build/building/multi-platform/

@lambrospetrou
Copy link

lambrospetrou commented Aug 18, 2023

I was so excited to use Hurl for a new project, but I also need ARM64 linux support... 🙁
I see that there is a Mac arm64 release for v4.0.0, but not for linux: https://github.com/Orange-OpenSource/hurl/releases/

Is this something you are planning on adding?

edit: I am also experimenting with running hurl on AWS Lambda (provided.al2 runtime) and I am getting /lib64/libc.so.6: version GLIBC_2.28' not found errors, so probably a static compilation using Rust's cross would be desirable. I will try to compile it statically and see if it works.

edit 2: I managed to get it running on AWS Lambda with a non-AWS base image (debian:12-slim) so I can use hurl now, but a native binary would be awesome 😅

@humphd
Copy link
Author

humphd commented Aug 18, 2023

+1 to arm64 and lInux, which you need for Docker on Mac with Apple Silicon. I've had students run into this during the term trying to dockerize hurl and run in development on their macs.

@lepapareil
Copy link
Collaborator

lepapareil commented Aug 28, 2023

Hi @humphd, I created a manifest with amd64 and arm64 images on my fork, it works on my raspberry pi4 and mac m1, can you please try this on your arm64/v8 device ? :

  • Have to give Hurl version:
docker run ghcr.io/lepapareil/hurl:latest --version
  • Have to Return a failure with actual value is <200>
echo -e "GET https://hurl.dev\n\nHTTP 201" > /tmp/test.hurl
docker run --rm -v /tmp/test.hurl:/tmp/test.hurl ghcr.io/lepapareil/hurl:latest --test --color /tmp/test.hurl

If the test is ok, we will be able to deliver this new arm64 docker image for all future versions.

@humphd
Copy link
Author

humphd commented Aug 28, 2023

Amazing, thank you for doing this! Here are my test results:

docker run ghcr.io/lepapareil/hurl:latest --version

I get this:

docker run ghcr.io/lepapareil/hurl:latest --version
Unable to find image 'ghcr.io/lepapareil/hurl:latest' locally
latest: Pulling from lepapareil/hurl
4060ece20d7a: Pull complete
b4ad028b61cb: Pull complete
86ea65e843f8: Pull complete
54ef6aa33a32: Pull complete
438cea9a9c66: Pull complete
f3342e23185c: Pull complete
f6dfcddfc8ef: Pull complete
ace20a5a2b9e: Pull complete
789420c3c536: Pull complete
1180e5add458: Pull complete
Digest: sha256:20fe7a2297e100af6f0bf23980538fded42121b5bb2ab2bc4d97a6372412592e
Status: Downloaded newer image for ghcr.io/lepapareil/hurl:latest
hurl 4.0.0 libcurl/8.2.1 OpenSSL/3.0.10 zlib/1.2.13 brotli/1.0.3840 nghttp2/1.51.0
Features (libcurl):  alt-svc AsynchDNS brotli HSTS HTTP2 IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
Features (built-in): brotli
  • Have to Return a failure with actual value is <200>
echo -e "GET https://hurl.dev\n\nHTTP 201" > /tmp/test.hurl
docker run --rm -v /tmp/test.hurl:/tmp/test.hurl ghcr.io/lepapareil/hurl:latest --test --color /tmp/test.hurl

I get this:

echo -e "GET https://hurl.dev\n\nHTTP 201" > /tmp/test.hurl
~
❯ docker run --rm -v /tmp/test.hurl:/tmp/test.hurl ghcr.io/lepapareil/hurl:latest --test --color /tmp/test.hurl

/tmp/test.hurl: Running [1/1]
error: Assert status code
  --> /tmp/test.hurl:3:6
   |
 3 | HTTP 201
   |      ^^^ actual value is <200>
   |

/tmp/test.hurl: Failure (1 request(s) in 794 ms)
--------------------------------------------------------------------------------
Executed files:  1
Succeeded files: 0 (0.0%)
Failed files:    1 (100.0%)
Duration:        800 ms

@lepapareil
Copy link
Collaborator

What a speedy response @humphd 😄.
We'll update our packaging as soon as my teammates get back from holiday 🌞.

@softprops
Copy link

we will be able to deliver this new arm64 docker image for all future versions.

This is good but doesn't actually address my needs. I already have an docker image but not one which includes the rust toolchain which I'd need to build the hurl project to create a binary that I could run inside of it. Would it be possible to build a rust binary for arm that I could run on linux downloadable the same way the osx arm binary is available?

@humphd
Copy link
Author

humphd commented Aug 28, 2023

@softprops perhaps I'm misunderstanding you, but the image I just tested is linux/arm64/v8

docker image inspect ghcr.io/lepapareil/hurl:latest
[
    {
        "Id": "sha256:97376f6ce462140021cf6c32d6ea0c5f075f4fce2972879bd195c0880092f855",
        "RepoTags": [
            "ghcr.io/lepapareil/hurl:latest"
        ],
        "RepoDigests": [
            "ghcr.io/lepapareil/hurl@sha256:20fe7a2297e100af6f0bf23980538fded42121b5bb2ab2bc4d97a6372412592e"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-08-25T10:08:54.697632625Z",
        "Container": "e4ecd50e04cf9943ca3a4c5fd6014a800e7c10e45ea3aa077b06869d1e4ec6d2",
        "ContainerConfig": {
            "Hostname": "e4ecd50e04cf",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "ENTRYPOINT [\"/usr/bin/hurl\"]"
            ],
            "Image": "sha256:01246cbdfa5f41b0729c80ffbeb87bb23dfebe24a642bb41ea1476019a5f66ff",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/usr/bin/hurl"
            ],
            "OnBuild": null,
            "Labels": {
                "com.orange.hurl.authors": "Fabrice REIX, Jean Christophe AMIEL, Orange-OpenSource",
                "com.orange.hurl.base.name": "alpine:3.17",
                "com.orange.hurl.created": "test",
                "com.orange.hurl.description": "Hurl is a command line tool that runs HTTP requests defined in a simple plain text format",
                "com.orange.hurl.documentation": "https://hurl.dev",
                "com.orange.hurl.licenses": "Apache-2.0",
                "com.orange.hurl.source": "https://github.com/Orange-OpenSource/hurl",
                "com.orange.hurl.title": "Hurl",
                "com.orange.hurl.url": "https://hurl.dev",
                "com.orange.hurl.vendor": "Orange-OpenSource",
                "com.orange.hurl.version": "4.0.0",
                "org.opencontainers.image.description": "Hurl is a command line tool that runs HTTP requests defined in a simple plain text format",
                "org.opencontainers.image.licenses": "Apache-2.0",
                "org.opencontainers.image.source": "https://github.com/Orange-OpenSource/hurl"
            }
        },
        "DockerVersion": "20.10.5+dfsg1",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": null,
            "Image": "sha256:01246cbdfa5f41b0729c80ffbeb87bb23dfebe24a642bb41ea1476019a5f66ff",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/usr/bin/hurl"
            ],
            "OnBuild": null,
            "Labels": {
                "com.orange.hurl.authors": "Fabrice REIX, Jean Christophe AMIEL, Orange-OpenSource",
                "com.orange.hurl.base.name": "alpine:3.17",
                "com.orange.hurl.created": "test",
                "com.orange.hurl.description": "Hurl is a command line tool that runs HTTP requests defined in a simple plain text format",
                "com.orange.hurl.documentation": "https://hurl.dev",
                "com.orange.hurl.licenses": "Apache-2.0",
                "com.orange.hurl.source": "https://github.com/Orange-OpenSource/hurl",
                "com.orange.hurl.title": "Hurl",
                "com.orange.hurl.url": "https://hurl.dev",
                "com.orange.hurl.vendor": "Orange-OpenSource",
                "com.orange.hurl.version": "4.0.0",
                "org.opencontainers.image.description": "Hurl is a command line tool that runs HTTP requests defined in a simple plain text format",
                "org.opencontainers.image.licenses": "Apache-2.0",
                "org.opencontainers.image.source": "https://github.com/Orange-OpenSource/hurl"
            }
        },
        "Architecture": "arm64",
        "Variant": "v8",
        "Os": "linux",
        "Size": 20360955,
        "VirtualSize": 20360955,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/2904310b11d295783302e804ce45482f713d117356819f5965d9740dd6263900/diff:/var/lib/docker/overlay2/738fcbc363db3b9641f90f452f9b3126e696e822e4d737b172ed518ae7001b26/diff:/var/lib/docker/overlay2/6453fc86963ab917ab59d11a8a5235bb34ff0ff3336760bbaaa5d764ca81bff1/diff:/var/lib/docker/overlay2/41898e6ed135609ef5d17421a54504b6155ca9664474a5cc29ee9d76e1f5a04b/diff:/var/lib/docker/overlay2/2ed88c69f610f5e5bead78ac14541993c9a018f105e1c270c059b1c0f277416e/diff:/var/lib/docker/overlay2/2ba336a84fb07f6dfc130003549e2a8d9f6ac7e0fbdf026829d80c1a9185d999/diff:/var/lib/docker/overlay2/6f61af111b647b1504fbbf4f69bf60b3ee0a3460d066789931f053c2f26d13fc/diff:/var/lib/docker/overlay2/4cee12eb48f2a467c4d3391c7ad0a06ba0603347d287c20fab61a6c16c1a79ec/diff:/var/lib/docker/overlay2/1415f322463be8dd1e4aac357420aa79c4191784fd15485cc216e3921b616321/diff",
                "MergedDir": "/var/lib/docker/overlay2/cafbe9b3dd10d3bdee73a9bd4df994a84610637dd72e6efdd8b3ae0ee17082da/merged",
                "UpperDir": "/var/lib/docker/overlay2/cafbe9b3dd10d3bdee73a9bd4df994a84610637dd72e6efdd8b3ae0ee17082da/diff",
                "WorkDir": "/var/lib/docker/overlay2/cafbe9b3dd10d3bdee73a9bd4df994a84610637dd72e6efdd8b3ae0ee17082da/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d2d9d24a8c2a7ad73a7247738096e24c1ef2c2b02a3690dbf7d63641d26e26cb",
                "sha256:2e0add5c94656198abe24c5bb4fdd47a553a59814bcca66b9732654827a86e73",
                "sha256:94855a4638516f4d58511c554a98d1ba8e68d385d8a3b91c24e1719c8f9b626c",
                "sha256:f0ee0ad4ffc3b739759a837fb5bd981348bdd21ad003354b9504651df2a09bc8",
                "sha256:37bf0d921ab497a0c1dafc1ce2c30604d083c075a9a122d18e34ac9aa0a68008",
                "sha256:c7ab018d197de62c30c89076370ba420307e005758c9444112fc7fc083bd8741",
                "sha256:03f79bb6185a9d48e48bac440ed82521d4e8bf6ce55bdb0c4d2012d65c02229a",
                "sha256:e85e47c1f32247379b366ab3b02152ecdb716cf2350056e4ad5c1acdd3eafc2c",
                "sha256:e44a3f8b453bee53d0d2d93c23b42895a89236ad7e8c27edc3ca1b5ed8c4dc51",
                "sha256:b710d0a61cb38f91aeb3975d9f8453d5bd9d960c4114f96999bef0b331bd6712"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }

Or do you mean separate from Docker?

@lepapareil
Copy link
Collaborator

we will be able to deliver this new arm64 docker image for all future versions.

This is good but doesn't actually address my needs. I already have an docker image but not one which includes the rust toolchain which I'd need to build the hurl project to create a binary that I could run inside of it. Would it be possible to build a rust binary for arm that I could run on linux downloadable the same way the osx arm binary is available?

Hi @softprops, and thks for your support 😄
I'm only responding to the original need of this PR: Support more platforms in orangeopensource/hurl Docker image.

Yet, having an arm64 linux binary would be great, we have to talk about this with our team members to see how we can achieve this.

Maybe it would be better to open a new issue and avoid mixing the two subjects (arm64 linux binary vs docker arm64 alpine image) ?

@softprops
Copy link

@lepapareil agree. here's the separate issue for tracking #1873

@lepapareil lepapareil linked a pull request Aug 29, 2023 that will close this issue
@lepapareil lepapareil removed a link to a pull request Aug 29, 2023
@lepapareil lepapareil linked a pull request Aug 29, 2023 that will close this issue
@lepapareil
Copy link
Collaborator

We'll close this issue in the next releasing.

@lepapareil lepapareil added this to the 4.1.0 milestone Aug 29, 2023
@lepapareil
Copy link
Collaborator

Hi @softprops and @lambrospetrou, in response to #536 (comment) and #536 (comment), as AWS Lambda provided.al2 arm64 docker image is based on Redhat (rpm), you can use a workaround by compiling hurl as follows:

  • Run the AWS lambda image on an arm64 device/runner:
docker run --rm --entrypoint sh public.ecr.aws/lambda/provided
  • In this running container, execute:
yum install -y git curl
git clone --depth 1 https://github.com/Orange-OpenSource/hurl.git /tmp/hurl
cd /tmp/hurl
yum install -y sudo procps gcc libxml2-devel openssl-devel libcurl-devel
bin/install_rust.sh
bin/release/release.sh
export PATH="/tmp/hurl/target/release:${PATH}"
uname -m && hurl --version
  • Result:

image

@lepapareil
Copy link
Collaborator

Hi @humphd, ghcr.io/orange-opensource/hurl:4.1.0 is now officially available, it supports both amd64 and arm64, we'll wait for your feedback to close this issue 😀.

@jcamiel
Copy link
Collaborator

jcamiel commented Sep 22, 2023

Works for me on MBP M1!

$ docker run ghcr.io/orange-opensource/hurl:4.1.0 --version
Unable to find image 'ghcr.io/orange-opensource/hurl:4.1.0' locally
4.1.0: Pulling from orange-opensource/hurl
4060ece20d7a: Already exists
4e6a97226f29: Pull complete
fd153139bc5f: Pull complete
0216544b570f: Pull complete
96af6cf31ad0: Pull complete
ac5d11963607: Pull complete
a1d994f77046: Pull complete
adb0281e5b5c: Pull complete
74de53deaa62: Pull complete
dc6305bada08: Pull complete
Digest: sha256:a9344f706f4581e2eb5361a37d861dbb1d4d51deefa9838025f6fba69c4981b6
Status: Downloaded newer image for ghcr.io/orange-opensource/hurl:4.1.0
hurl 4.1.0 (aarch64-alpine-linux-musl) libcurl/8.2.1 OpenSSL/3.0.10 zlib/1.2.13 brotli/1.0.3840 nghttp2/1.51.0
Features (libcurl):  alt-svc AsynchDNS brotli HSTS HTTP2 IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
Features (built-in): brotli

@lambrospetrou
Copy link

Also works on ARM64 servers from Hetzner :) Thanks for enabling this!!!

  • Hurl
$ docker run -it --rm -v ~/dev/tmp/:/tmp/tests/ ghcr.io/orange-opensource/hurl:4.1.0 --test --color /tmp/tests/example.hurl
/tmp/tests/example.hurl: Running [1/1]
/tmp/tests/example.hurl: Success (1 request(s) in 415 ms)
--------------------------------------------------------------------------------
Executed files:  1
Succeeded files: 1 (100.0%)
Failed files:    0 (0.0%)
Duration:        418 ms
  • CPU
$ lscpu
Architecture:                    aarch64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              1
Core(s) per socket:              4
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       ARM
Model:                           1
Model name:                      Neoverse-N1

@humphd
Copy link
Author

humphd commented Sep 22, 2023

Tested locally, works great. Thank you so much for this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants