diff --git a/src/model/cloud-runner/providers/docker/index.ts b/src/model/cloud-runner/providers/docker/index.ts index 0f3beb4d..0d63a063 100644 --- a/src/model/cloud-runner/providers/docker/index.ts +++ b/src/model/cloud-runner/providers/docker/index.ts @@ -137,6 +137,7 @@ class LocalDockerCloudRunner implements ProviderInterface { // core.info(JSON.stringify({ workspace, actionFolder, ...this.buildParameters, ...content }, undefined, 4)); const entrypointFilePath = `start.sh`; + // Use #!/bin/sh for POSIX compatibility (Alpine-based images like rclone/rclone don't have bash) const fileContents = `#!/bin/sh set -e diff --git a/src/model/docker.ts b/src/model/docker.ts index 5f59b023..657aebc5 100644 --- a/src/model/docker.ts +++ b/src/model/docker.ts @@ -55,6 +55,7 @@ class Docker { if (!existsSync(githubHome)) mkdirSync(githubHome); const githubWorkflow = path.join(runnerTempPath, '_github_workflow'); if (!existsSync(githubWorkflow)) mkdirSync(githubWorkflow); + // Alpine-based images (alpine, rclone/rclone, etc.) don't have /bin/bash, only /bin/sh const isAlpineBasedImage = image === 'alpine' || image.startsWith('rclone/'); const commandPrefix = isAlpineBasedImage ? `/bin/sh` : `/bin/bash`;