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

Docker arm64 support (Apple Silicon M1) #1300

Closed
felixblaschke opened this issue Apr 13, 2021 · 62 comments
Closed

Docker arm64 support (Apple Silicon M1) #1300

felixblaschke opened this issue Apr 13, 2021 · 62 comments

Comments

@felixblaschke
Copy link

The currently available docker images are only available to amd64 architecture:
https://hub.docker.com/r/backstopjs/backstopjs/tags?page=1&ordering=last_updated

Soon Apple will change to architecture of all Macbooks to arm64. The current Macbook Pro 13 inch is already available with the M1 processor.

Therefore we need backstopjs images that are compatible with arm64.

@garris
Copy link
Owner

garris commented Apr 19, 2021

@felixblaschke -- What's your recommendation? What needs to happen?

@felixblaschke
Copy link
Author

We need to wait for release of puppeteer/puppeteer#7099 because otherwise can't even npm install backstop, because of installation failures. (chrome binaries not found).

Then we need to configure the docker image to work with arm64 linux images. The node base image already supports that: https://hub.docker.com/_/node?tab=tags&page=1&ordering=last_updated

Next the built backstop docker image needs to be multi-arch build. (https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/)

@torbenberger
Copy link

@garris now that step 1 that was described by @felixblaschke seems to be resolved, how can we get m1 support? who can take the next steps?

@garris
Copy link
Owner

garris commented Jun 30, 2021

Thanks @torbenberger, my question is, will the new image be backwards compatible?

If the new assets will be backwards compatible then you would just need to rework the build scripts and create a pull request for me.

I don't have an M1 device so I'd need you to validate the new builds.

Does that make sense?

@torbenberger
Copy link

@garris what do you mean by backwards compatible? not quite understanding tbh.

i have an m1 mac so i could validate the new builds :-)

@garris
Copy link
Owner

garris commented Jul 15, 2021

Hi @torbenberger, sorry, my question is, will the new image continue to work on non-M1 hardware?

@torbenberger
Copy link

@garris
i think there is something called "multi arch images" but this produces different images for amd64 and arm64 cpus afaik. so i think we would need to have 2 images to support both architectures. but probably someone with more docker and multiarch knowledge can bring light to the darkness on this topic. i'm not that experience with that

@garris
Copy link
Owner

garris commented Jul 23, 2021

@torbenberger yes, I am not super knowledgeable about docker or M1 -- I don't want to break existing implementations so I just need someone to explain how this would work.

@WillKre
Copy link

WillKre commented Aug 24, 2021

Hi Was any progress made on this?

@garris
Copy link
Owner

garris commented Aug 24, 2021

@apswak no progress here. I am a high-level docker user -- so I would need help to understand the most compatible way I can add support for this.

(This is a little baffling since I thought docker is supposed to solve the hardware abstraction problem 🤷‍♂️)

@cdeutsch
Copy link

cdeutsch commented Nov 1, 2021

Shoot. Just ran into this after getting a new laptop (which is going to become more common with the new MacBook Pros out)

@felixblaschke any guidance you can add for updating the Docker image?

@felixblaschke
Copy link
Author

felixblaschke commented Nov 1, 2021

Shoot. Just ran into this after getting a new laptop (which is going to become more common with the new MacBook Pros out)

@felixblaschke any guidance you can add for updating the Docker image?

No sorry, I use a secondary x86 device or VM to execute tests.

@cdeutsch
Copy link

cdeutsch commented Nov 1, 2021

I was able to get Backstop v4.3.2 to run on my M1 by adding the following to my config:

  • added --single-process to engineOptions
  • added --disable-dev-shm-usage to engineOptions (OPTIONAL, running many tests can cause a memory issue)
  • added --platform linux/amd64 to dockerCommandTemplate (OPTIONAL, removes a warning)

Example config:

{
  dockerCommandTemplate:
    'docker run --rm -it --net="host" --platform linux/amd64 --mount type=bind,source="{cwd}",target=/src backstopjs/backstopjs:{version} {backstopCommand} {args}',
  engine: 'puppeteer',
  engineOptions: {
    args: ['--no-sandbox', '--disable-dev-shm-usage', '--single-process'],
  }
}

I didn't have luck getting v5.4.4 to work.

@garris
Copy link
Owner

garris commented Nov 2, 2021

@cdeutsch what error did you get with v5.4.4?

@cdeutsch
Copy link

cdeutsch commented Nov 2, 2021

@garris for v5.4.4 puppeteer isn't starting. Looks like it won't go into Single Threaded mode.

COMMAND | Executing core for "test"
createBitmaps | Selected 30 of 30 scenarios.
      COMMAND | Command "test" ended with an error after [1.575s]
      COMMAND | Error: Failed to launch the browser process!
                [1102/200139.436316:ERROR:stack_trace_posix.cc(676)] Failed to parse the contents of /proc/self/maps
                [1102/200139.686485:ERROR:stack_trace_posix.cc(676)] Failed to parse the contents of /proc/self/maps
                [1102/200139.686638:ERROR:stack_trace_posix.cc(676)] Failed to parse the contents of /proc/self/maps
                [1102/200139.711694:FATAL:zygote_main_linux.cc(161)] Check failed: sandbox::ThreadHelpers::IsSingleThreaded().
                #0 0x004006aa0f49 base::debug::CollectStackTrace()
                #1 0x004006a0a933 base::debug::StackTrace::StackTrace()
                #2 0x004006a1e500 logging::LogMessage::~LogMessage()
                #3 0x004006a1f04e logging::LogMessage::~LogMessage()
                #4 0x0040065bea27 content::ZygoteMain()
                #5 0x0040065b9ae5 content::RunZygote()
                #6 0x0040065bafcb content::ContentMainRunnerImpl::Run()
                #7 0x0040065b87cb content::RunContentProcess()
                #8 0x0040065b90cd content::ContentMain()
                #9 0x004006618136 headless::(anonymous namespace)::RunContentMain()
                #10 0x004006617e93 headless::RunChildProcessIfNeeded()
                #11 0x004006616af5 headless::HeadlessShellMain()
                #12 0x00400342bae1 ChromeMain
                #13 0x004012b402e1 __libc_start_main
                #14 0x00400342b92a _start

                [1102/200139.711694:FATAL:zygote_main_linux.cc(161)] Check failed: sandbox::ThreadHelpers::IsSingleThreaded().
                #0 0x004006aa0f49 base::debug::CollectStackTrace()
                #1 0x004006a0a933 base::debug::StackTrace::StackTrace()
                #2 0x004006a1e500 logging::LogMessage::~LogMessage()
                #3 0x004006a1f04e logging::LogMessage::~LogMessage()
                #4 0x0040065bea27 content::ZygoteMain()
                #5 0x0040065b9ae5 content::RunZygote()
                #6 0x0040065bafcb content::ContentMainRunnerImpl::Run()
                #7 0x0040065b87cb content::RunContentProcess()
                #8 0x0040065b90cd content::ContentMain()
                #9 0x004006618136 headless::(anonymous namespace)::RunContentMain()
                #10 0x004006617e93 headless::RunChildProcessIfNeeded()
                #11 0x004006616af5 headless::HeadlessShellMain()
                #12 0x00400342bae1 ChromeMain
                #13 0x004012b402e1 __libc_start_main
                #14 0x00400342b92a _start

                Received signal 6
                Received signal 6
                #0 0x004006aa0f49 #0 0x004006aa0f49 base::debug::CollectStackTrace()
                #1 0x004006a0a933 base::debug::CollectStackTrace()
                #1 0x004006a0a933 base::debug::StackTrace::StackTrace()
                #2 0x004006aa0a21 base::debug::StackTrace::StackTrace()
                #2 0x004006aa0a21 base::debug::(anonymous namespace)::StackDumpSignalHandler()base::debug::(anonymous namespace)::StackDumpSignalHandler()

                ##33  0x0x00400e3270e000400e3270e0  <unknown><unknown>

                ##44  0x0x004012b52fff004012b52fff  gsignalgsignal

                ##55  0x0x004012b5442a004012b5442a  abort
                #6 0x004006a9fcb5 abort
                #6 0x004006a9fcb5 base::debug::BreakDebugger()
                #7 0x004006a1e927 base::debug::BreakDebugger()
                #7 0x004006a1e927 logging::LogMessage::~LogMessage()logging::LogMessage::~LogMessage()

                ##88  0x0x004006a1f04e004006a1f04e  logging::LogMessage::~LogMessage()logging::LogMessage::~LogMessage()

                ##99  0x0x0040065bea270040065bea27  content::ZygoteMain()content::ZygoteMain()

                ##10 100x 0x0040065b9ae5 0040065b9ae5 content::RunZygote()
                #11 0x0040065bafcb content::RunZygote()
                #11 0x0040065bafcb content::ContentMainRunnerImpl::Run()
                #12content::ContentMainRunnerImpl::Run()
                0x#0040065b87cb12  0x0040065b87cb content::RunContentProcess()
                #13 0x0040065b90cd content::RunContentProcess()
                #13 0x0040065b90cd content::ContentMain()
                #14 0x004006618136 content::ContentMain()
                #14 0x004006618136 headless::(anonymous namespace)::RunContentMain()
                #15 0x004006617e93 headless::(anonymous namespace)::RunContentMain()
                #15 0x004006617e93 headless::RunChildProcessIfNeeded()
                #16 0x004006616af5 headless::RunChildProcessIfNeeded()
                #16 0x004006616af5 headless::HeadlessShellMain()headless::HeadlessShellMain()

                ##1717  0x0x00400342bae100400342bae1  ChromeMainChromeMain

                ##1818  0x0x004012b402e1004012b402e1  __libc_start_main
                #19 0x__libc_start_main00400342b92a
                #19 0x00400342b92a _start
                  r8: 0000000000000000  r9: 000000400deda550 r10: 0000000000000008 r11: 0000165c002d032e
                 r12: 0000165c002e4500 r13: 000000400deda7a0 r14: 0000165c002e4510 r15: aaaaaaaaaaaaaaaa
                  di: 0000000000000002  si: 000000400deda550  bp: 000000400deda790  bx: 0000000000000006
                  dx: 0000000000000000  ax: 0000000000000000  cx: 0000000000000000  sp: 000000400deda5c8
                  ip: 0000004012b52fff efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000
                 trp: ffffffffffffffff msk: 0000000000000000 cr2: 0000000000000000
                _start
                  r8: [end of stack trace]
                0000000000000000  r9: 000000400deda530 r10: 0000000000000008 r11: 0000156a002d032e
                 r12: 0000156a002e4500 r13: 000000400deda780 r14: 0000156a002e4510 r15: aaaaaaaaaaaaaaaa
                  di: 0000000000000002  si: 000000400deda530  bp: 000000400deda770  bx: 0000000000000006
                  dx: 0000000000000000  ax: 0000000000000000  cx: 0000000000000000  sp: 000000400deda5a8
                  ip: 0000004012b52fff efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000
                 trp: ffffffffffffffff msk: 0000000000000000 cr2: 0000000000000000
                [end of stack trace]
                qemu: uncaught target signal 6 (Aborted) - core dumped
                qemu: uncaught target signal 6 (Aborted) - core dumped
                Received signal 11 SEGV_MAPERR 2f736a706f7473
                #0 0x004006aa0f49 base::debug::CollectStackTrace()
                #1 0x004006a0a933 base::debug::StackTrace::StackTrace()
                #2 0x004006aa0a21 Fontconfig warning: "/etc/fonts/fonts.conf", line 100: unknown element "blank"
                base::debug::(anonymous namespace)::StackDumpSignalHandler()
                #3 0x00400e3270e0 <unknown>
                #4 0x004006c18250 event_base_loop
                #5 0x004006ad4e00 base::MessagePumpLibevent::Run()
                #6 0x004006a75475 qemu: uncaught target signal 11 (Segmentation fault) - core dumped


                TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md

                    at onClose (/usr/local/lib/node_modules/backstopjs/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:197:20)
                    at Interface.<anonymous> (/usr/local/lib/node_modules/backstopjs/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:187:68)
                    at Interface.emit (events.js:387:35)
                    at Interface.close (readline.js:451:8)
                    at Socket.onend (readline.js:224:10)
                    at Socket.emit (events.js:387:35)
                    at endReadableNT (internal/streams/readable.js:1317:12)
                    at processTicksAndRejections (internal/process/task_queues.js:82:21)
COMMAND | Executing core for "openReport"
openReport | Attempting to ping
   COMMAND | Command "test" ended with an error after [38.84s]
   COMMAND | Error: docker run --rm -it --net="host" --mount type=bind,source="/Users/me/work/source/frontend-e2e-tests",target=/src backstopjs/backstopjs:5.4.4 test "--moby" "--config=backstop_data/dist/dashConfig" returned 1
                 at ChildProcess.<anonymous> (/Users/me/work/source/frontend-e2e-tests/node_modules/backstopjs/core/util/runDocker.js:68:18)
                 at ChildProcess.emit (node:events:394:28)
                 at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
openReport | Remote not found. Opening backstop_data/html_report/index.html

@garris
Copy link
Owner

garris commented Nov 2, 2021

@cdeutsch as a forward fix, maybe a newer version of puppeteer might address this issue?

@cdeutsch
Copy link

cdeutsch commented Nov 3, 2021

I was able to build an M1 compatible Docker image by doing the following:

  • Add PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true to npm install backstopjs to prevent it from hitting an issue with no ARM version of chromium existing.
  • Add chromium to list of apt-get packages

Screen Shot 2021-11-02 at 6 04 00 PM

  • Update build-docker to run docker buildx build instead of docker build
    (to my knowledge buildx is Mac and Windows only)

image

  • In my project change the puppeteer executablePath for chromium to /usr/bin/chromium
    (this is due to how puppeteer defaults based on ARM)
    image

Unfortunately Debian 9 uses chromium 73.0.3683.75 and it looks like Puppeteer v10.0.0 is using 92.0.4512.0

The version difference (or just the Debain version of chromium) is leading to slight differences in rendering, so this wouldn't be backward compatible; but it did render the same across an Intel versus ARM Mac.

I could share the Docker Image I made for people in this scenario (after more testing) or Backstop itself could publish one using the changes above.
(In my Docker image I upgraded node to FROM node:16.3.0 in the Dockerfile to get a newer version of Debian and therefore chromium 89.0.4389.114)

Alternatively we'll have to wait for puppeteer to include an arm64 version of chromium. puppeteer/puppeteer#7740

@garris
Copy link
Owner

garris commented Nov 3, 2021

@cdeutsch thank you for this workaround! I'd like to see if the puppeteer team has any response to your request before making an official BackstopJS patch (the rendering difference will likely cause some headaches) Let's give it a week or so. Cheers!

@weitzman
Copy link

Could use this on my project. Thanks for your efforts, @garris, @cdeutsch and all.

@DEfusion
Copy link
Contributor

DEfusion commented Dec 6, 2021

@cdeutsch workaround kind of got things working for me on my Mac, however with lots of tests it just hangs after taking the last screenshot, doesn't seem to with smaller test numbers if I use filtering.

Sadly it is failing completely for me on CI, not closing the browser, i.e. opens the 10 that I have set in concurrency but just sits after trying to close them all until CI times it out.

@cdeutsch
Copy link

cdeutsch commented Dec 6, 2021

@DEfusion I have asyncCaptureLimit: 1 and asyncCompareLimit: 10

I occasionally get hangs after 3 or 4 full runs. No idea why.

I had similar issues using stock backstop 4.3.2 and always assumed it was the quirky frontend I was trying to test.

@DEfusion
Copy link
Contributor

DEfusion commented Dec 6, 2021

I have asyncCaptureLimit: 1 and asyncCompareLimit: 10

I tried that locally and on CI but sadly still getting hangs on CI; stopped at 133/492 scenarios at Close Browser again. I've had issues with it hanging in the past (pre M1) when the compare limit was high locally (usually with big images to compare) and have tried to dig into Backstop to see why, guess I'll give that another look.

@DEfusion
Copy link
Contributor

DEfusion commented Dec 7, 2021

So I've had some success by switching to 6.0.1 and playwright, the suite runs completely on my machine and CI with the below changes. Playwright seems to install its own chromium but without installing it manually in Docker it complained that it needed dependencies installing which I couldn't get to install via npx command (our Dockerfile is customised and using node14 for something else on CI).

The change to the browser has resulting in very minor differences from text rendering but that happens from time to time anyway with browser bumps.

// backstop.config.js
onBeforeScript: 'playwright/onBefore.js',
onReadyScript: 'playwright/onReady.js',
engine: 'playwright',
engineOptions: { browser: 'chromium' },
asyncCaptureLimit: parseInt(process.env.BACKSTOP_CAPTURE_CONCURRENCY || 5, 10),
asyncCompareLimit: parseInt(process.env.BACKSTOP_COMPARE_CONCURRENCY || 10, 10),
# Dockerfile
- RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
+ RUN apt-get -y install chromium
- RUN npm install -g --unsafe-perm=true --allow-root backstopjs@${BACKSTOPJS_VERSION}
+ RUN PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install -g --unsafe-perm=true --allow-root backstopjs@${BACKSTOPJS_VERSION}

@garris
Copy link
Owner

garris commented Dec 8, 2021

Wow -- great progress!

If we make this change would this break anything for puppeteer+docker users? Maybe just rendering differences?

@cjbd
Copy link

cjbd commented Jan 20, 2022

hello, @cdeutsch , can you please share your docker file? thank you!

@cdeutsch
Copy link

My work got busy, but it's still on my radar if I can find time. I'm not a linux guru so figuring out the best way to get chromium to work in the docker container and still support path will be the hardest part.

@mikemadison13
Copy link

Is it possible to explore decoupling chromium? Using Behat and some of the other testing frameworks this hasn't been so painful, because Behat itself doesn't include Chromium. So, I can spin up a Chromium service in my docker setup and then just point Behat at that running service.

I think part of the pain here comes from Puppeteer itself trying to install Chrome/Chromium from NPM and having issues due to the binary.

@garris
Copy link
Owner

garris commented Jun 10, 2022

@mikemadison13 that is what @cdeutsch did above. There are just some details which need to be ironed out wrt validating that this solution will build and run universally.

Also, a question I haven't asked yet... I don't really understand why some versions of chrome won't run in a container hosted on different hardware. I thought container architecture solved this problem. Maybe there is an article someone could recommend?

@sirajtechy
Copy link

sirajtechy commented Jul 7, 2022

I did run through this same issue and I was able to overcome this issue by modifying my docker file to platform specific.

FROM --platform=linux/amd64 node:14-alpine

Platform flag helped me to get rid of the chromium issues . Hope it may helps someone who is building using Dockerfile .

@Degix
Copy link

Degix commented Aug 26, 2022

Update:
I repeated the steps mentioned above for Version 6.1.1.

A list.manifest.json will be created and showing linux/amd64 and linux/arm64.
Windows users have fetched the linux/amd64 with Chromium download disabled as well. So they needed to add this to their docker-template to find the chrome executable.
-e PUPPETEER_EXECUTABLE_PATH='node_modules/puppeteer/.local-chromium/linux-1022525/chrome-linux/chrome'

I dont know if Windows users would fetch the arm64 arch image if I only build it only for arm64, but i think so.

Therefore I stumbled up on docker buildx imagetools create.
With that, you can combine existing images and combine them to one (multi-arch) image.
I've looked up the BackstopJS official 6.1.1 sha256 and my already uploaded one for the arm64 arch and combined them.
Now the linux/amd64 refers to the offical image and the arm64 one is refering to my fixed one.

(!) You can add --dry-run so you can see the output of the list.manifest first and it won't be pushed directly
The Images were already pushed in my Repo, i think this command will only update the list.manifest.json and not upload the images again or freshly (local) created onces

The command i've used was:
docker buildx imagetools create myrepo/backstopjs/backstopjs@sha256:0f3c000d59557a11d7db3048e8cfa07e2eef04a6bd91cbb0173b14d9049497a3 sha256:5c705236b9d1d899cfb94b3263e1bbce8570e2d81ccbc8aa7287b592363a0d31 -t myrepo/backstop/backstopjs:6.1.1

I'm currently very busy as well, but maybe i'll try to play around to get this out of the box for all arch. When I have success I will create an MR/PR.

@dkarlovi
Copy link

@garris from my understanding of the issue, the changes would be totally unrelated to the current Docker image. It would be like you have separate images, they would only share the name and version number.

When the build is done, the images are published with their name, version and architecture.

When a current user pulls the Backstop image, they get the current image. When the M1 user pulls the image, they'd get the ARM version of the image (as in, it would be a different image). Here's some information about it:
https://gist.github.com/ciaranmcnulty/f82e710668ee285473ea724c83dd51ec

Here's an example image using separate architectures (notice the "OS/ARCH" dropdown) and here's how the GitHub actions for the image look like. The Dockerfile uses a BUILDPLATFORM build argument.

@ukrutt
Copy link

ukrutt commented Feb 9, 2023

There seems to be a new version of Docker that relies on Rosetta to fix this issue (at least it fixed it for me.) My setup:

  • MacBook Pro / Apple M1 Pro chip
  • macOS 13.2 / Ventura (I had to upgrade from 12 to see the checkbox in the last step.)
  • BackstopJS v5.4.4
  • Docker v4.16.2
  • In Docker Settings -> Features in development, check the box "Use Rosetta for x86/amd64 emulation on Apple Silicon".

My tests run well now (albeit possibly slower than they do on an Intel Mac.)

@tkrah
Copy link
Contributor

tkrah commented Mar 14, 2023

@garris If I would create a PR to include support for a multiarch docker build (amd64, arm64) - would you consider to merge that - just asking before I am going to put my free time on this ;)?

@garris
Copy link
Owner

garris commented Mar 15, 2023

@tkrah Thank you so much for the offer here. Yes I would consider this -- but I would want to understand the impact... I have a very simple build & deploy process -- would like to understand what kind of changes I would need to make on my end -- for example, I assume I would have to push multiple docker builds etc.

But also -- and possibly more important, @ukrutt mentioned here that simply bumping versions resolved the issue. Was wondering if you had tried this and what were the results?

@tkrah
Copy link
Contributor

tkrah commented Mar 15, 2023

ukrutts solution does not help, it is still emulated with rosetta and still too slow to be useful if you want to have acceptable runtimes with many tests, a native image is the solution to the problem.
Ok I'll try to prepare a PR and then we can discuss the impact there.

tkrah pushed a commit to tkrah/BackstopJS that referenced this issue Mar 15, 2023
tkrah pushed a commit to tkrah/BackstopJS that referenced this issue Mar 15, 2023
tkrah added a commit to tkrah/BackstopJS that referenced this issue Mar 15, 2023
tkrah added a commit to tkrah/BackstopJS that referenced this issue Mar 15, 2023
tkrah added a commit to tkrah/BackstopJS that referenced this issue Mar 15, 2023
@tkrah
Copy link
Contributor

tkrah commented Mar 16, 2023

Can someone here with an arm64 platform try to build the image and confirm it is functional? @felixblaschke or @torbenberger maybe?

Edit: I got an owner of a arm64 M1 to test that image and got a positive answer, but it does not harm to have multiple success reports.

tkrah added a commit to tkrah/BackstopJS that referenced this issue Mar 16, 2023
@FinnBueno
Copy link

Has the docker-image been updated to reflect the latest change? From what I can tell, https://hub.docker.com/r/backstopjs/backstopjs/ was last updated 5 months ago. Seeing this was merged 5 days ago, I'm going to assume that the currently hosted image doesn't include these changes yet.

@tkrah
Copy link
Contributor

tkrah commented Mar 21, 2023

Has the docker-image been updated to reflect the latest change? From what I can tell, https://hub.docker.com/r/backstopjs/backstopjs/ was last updated 5 months ago. Seeing this was merged 5 days ago, I'm going to assume that the currently hosted image doesn't include these changes yet.

@FinnBueno No of cause this is not yet released, it was merged yesterday btw. @garris is working on that I assume for version 6.2.0.
But you can now build your own image for the time being with backstopjs 6.1.4 like written in the README.md of the docker folder and use that until it is released.

@FinnBueno
Copy link

@FinnBueno No of cause this is not yet released, it was merged yesterday btw. @garris is working on that I assume for version 6.2.0. But you can now build your own image for the time being with backstopjs 6.1.4 like written in the README.md of the docker folder and use that until it is released.

My bad, I now see that it was indeed merged yesterday. I asked because me and my team actually hit this roadblock today and I was very glad to see a solution was just merged. I'll be trying to run this with a self-built image for now, thanks!

@tkrah
Copy link
Contributor

tkrah commented Mar 21, 2023

@FinnBueno No of cause this is not yet released, it was merged yesterday btw. @garris is working on that I assume for version 6.2.0. But you can now build your own image for the time being with backstopjs 6.1.4 like written in the README.md of the docker folder and use that until it is released.

My bad, I now see that it was indeed merged yesterday. I asked because me and my team actually hit this roadblock today and I was very glad to see a solution was just merged. I'll be trying to run this with a self-built image for now, thanks!

What a lucky coincidence that I did that PR last week 😂 I hope it works for you and your team.

@garris
Copy link
Owner

garris commented Mar 22, 2023

I can confirm that I am indeed working to get @tkrah 's solution out -- I hope to push new docker builds out tomorrow morning before my day explodes 😅

@garris
Copy link
Owner

garris commented Mar 22, 2023

📣 New docker arm64 support for Apple Silicon has been deployed! Many thanks to @tkrah for this fix addressing the issue dating back at least 2 years!

Please post your results here if there are any issues. Cheers!

@tkrah
Copy link
Contributor

tkrah commented Mar 31, 2023

@garris can be closed here imho - people open new issues anyway already ;-). btw you missed to create or push the 6.2.0 tag.

@garris
Copy link
Owner

garris commented Apr 1, 2023

Thank you. Yes, I will push a new version soon.

@garris garris closed this as completed Apr 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests