diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 105a3ad..1d6bc87 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -162,8 +162,9 @@ jobs: - name: Verify Play Store deployment run: | - pip install google-auth requests --quiet 2>&1 | grep -v "already satisfied" || true - python3 scripts/verify_playstore_deploy.py + python3 -m venv /tmp/playstore-venv + /tmp/playstore-venv/bin/pip install google-auth requests --quiet + /tmp/playstore-venv/bin/python3 scripts/verify_playstore_deploy.py deploy-apk: diff --git a/ci/main.go b/ci/main.go index c92d236..6c95d8a 100644 --- a/ci/main.go +++ b/ci/main.go @@ -338,7 +338,12 @@ func (m *Ci) Deployer(sshKey *dagger.Secret, knownHosts *dagger.Secret) *dagger. return dag.Container(). From("alpine:3.21"). WithExec([]string{"apk", "--no-cache", "add", "rsync", "openssh-client", "python3", "tar"}). - WithMountedSecret("/root/.ssh/id_ed25519", sshKey, dagger.ContainerWithMountedSecretOpts{Mode: 0600}). + // Mount at a raw path so we can normalise before use: strip any CRLF line + // endings that appear when the key is stored or exported on Windows, which + // cause "error in libcrypto" in Alpine's LibreSSL-backed openssh. + WithMountedSecret("/root/.ssh/id_ed25519.raw", sshKey, dagger.ContainerWithMountedSecretOpts{Mode: 0600}). + WithExec([]string{"sh", "-c", + "tr -d '\\r' < /root/.ssh/id_ed25519.raw > /root/.ssh/id_ed25519 && chmod 600 /root/.ssh/id_ed25519"}). WithMountedSecret("/root/.ssh/known_hosts", knownHosts, dagger.ContainerWithMountedSecretOpts{Mode: 0644}). WithEnvVariable("RSYNC_RSH", "ssh -i /root/.ssh/id_ed25519") } diff --git a/scripts/setup_dagger_remote.sh b/scripts/setup_dagger_remote.sh index 4cba9f2..369c0cb 100755 --- a/scripts/setup_dagger_remote.sh +++ b/scripts/setup_dagger_remote.sh @@ -23,10 +23,13 @@ export_secret() { local value value=$(jq -r --arg k "$name" '.[$k] // empty' "$SECRETS_JSON") if [ -n "${GITHUB_ENV:-}" ]; then - # Use heredoc syntax for multiline-safe export + # Use heredoc syntax for multiline-safe export. + # Avoid adding a second trailing newline for values that already end with one + # (e.g. SSH private keys), which can corrupt PEM parsing. { printf '%s<<__EOF__\n' "$name" - printf '%s\n' "$value" + printf '%s' "$value" + [ "${value%$'\n'}" = "$value" ] && printf '\n' printf '__EOF__\n' } >> "$GITHUB_ENV" fi