Convert the action from a Docker container action to a JavaScript (node24) action now that CLI v5 is a native binary

Ouverte
#321 3 commentaires 3 réactions 0 personnes assignées Voir sur GitHub

@minijus y travaille déjà.

Depuis le 24/10/2026.

  • #322 par @minijus — ouverte

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
Active
Stack technique
docker, github-actions, javascript, node.js, typescript
Domaine
ci-cd, devtools

Piste de recherche

Start by reading the action metadata (action.yml), Dockerfile, and entrypoint.sh to map the current inputs, outputs, and behavior. The issue proposes replacing these with a Node 24 action, CLI installation, and Octokit-based PR handling while preserving compatibility; define and implement that migration, then verify it across the listed runner platforms. The issue leaves substantial design and porting work, so it is not a small first contribution.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Is your feature request related to a problem? Please describe.

crowdin/github-action is a Docker container action (runs.using: docker, image: Dockerfile). The runner builds the image from crowdin/cli every time a job uses the action, which means:

  • It only runs on Linux runners with a Docker daemon. It doesn't work on macOS or Windows runners (#160).
  • On self-hosted runners in Kubernetes (Actions Runner Controller), it requires Docker-in-Docker. DinD needs privileged pods, which many organizations don't allow. ARC's Kubernetes container-hooks mode doesn't support container actions built from a Dockerfile.
  • Every run pulls crowdin/cli from Docker Hub and installs packages from Alpine apk mirrors. This is slow, can hit Docker Hub rate limits, and is hard to allow in restricted or air-gapped networks, where npm is typically already proxied (Artifactory, Nexus, etc.).
  • Files written into the workspace are owned by root (#284).

Describe the solution you'd like

Crowdin CLI v5 no longer needs Java. @crowdin/cli now installs a prebuilt standalone binary through platform packages (@crowdin/cli-linux-x64, -linux-arm64, -darwin-x64, -darwin-arm64, -win32-x64, and musl variants). That removes the main reason for shipping the action as a container.

Proposal: rewrite the action as a JavaScript action (runs.using: node24) that:

  1. Installs the requested CLI version from npm, or downloads the release binary, caching it with @actions/tool-cache. Ideally it would also accept an optional input for an existing CLI on PATH or a custom npm registry.
  2. Ports entrypoint.sh to TypeScript using @actions/core, @actions/exec and Octokit. This replaces the bash, curl and jq steps for PR creation, labels, assignees and reviewers.
  3. Keeps the existing inputs and outputs so it's a drop-in replacement, released as a new major version (e.g. v4) so v3 users aren't affected.

Benefits:

  • Works on Linux, macOS, Windows, x64 and arm64 (resolves #160).
  • No Docker, DinD or privileged runners needed. Works with ARC in Kubernetes mode.
  • Faster startup, because there's no image build on every run.
  • Runs as the runner user, so there are no root-owned files (#284).
  • Dependencies come only from npm, which is easy to mirror.

Describe alternatives you've considered

  • A composite action that runs npm i -g @crowdin/cli and then the existing entrypoint.sh. This is a smaller change, but it still depends on bash, git, curl, jq and gpg being on the runner, and it doesn't help Windows.
  • Calling the CLI directly in workflow steps instead of using the action. That loses the action's PR and branch handling, which is the main value of the action.
  • Publishing a prebuilt image and using docker://. This avoids the per-run build but still requires Docker or DinD.

Additional context

Related: #160 (macOS runner support), #167 (ARM, closed as a duplicate of #160), #284 (root-owned files).

Happy to help test a pre-release on self-hosted ARC runners.

🤖 Generated by Claude Opus 5.5 (claude-opus-5.5)

Langage dominant
Shell
Étoiles
244
Forks
69
Merge moyen
4 j 23 h
PR mergées (30 j)
2

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de crowdin/github-action

Toutes les issues de crowdin/github-action

Issues similaires

Plus d'issues Shell/Bash

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.