Home / Input Output / daedalus
Apr 15, 9-10 AM (0)
Apr 15, 10-11 AM (1)
Apr 15, 11-12 PM (0)
Apr 15, 12-1 PM (0)
Apr 15, 1-2 PM (1)
Apr 15, 2-3 PM (0)
Apr 15, 3-4 PM (0)
Apr 15, 4-5 PM (0)
Apr 15, 5-6 PM (0)
Apr 15, 6-7 PM (0)
Apr 15, 7-8 PM (0)
Apr 15, 8-9 PM (0)
Apr 15, 9-10 PM (0)
Apr 15, 10-11 PM (0)
Apr 15, 11-12 AM (2)
Apr 16, 12-1 AM (1)
Apr 16, 1-2 AM (0)
Apr 16, 2-3 AM (0)
Apr 16, 3-4 AM (0)
Apr 16, 4-5 AM (0)
Apr 16, 5-6 AM (0)
Apr 16, 6-7 AM (0)
Apr 16, 7-8 AM (1)
Apr 16, 8-9 AM (1)
Apr 16, 9-10 AM (0)
Apr 16, 10-11 AM (0)
Apr 16, 11-12 PM (0)
Apr 16, 12-1 PM (0)
Apr 16, 1-2 PM (0)
Apr 16, 2-3 PM (0)
Apr 16, 3-4 PM (0)
Apr 16, 4-5 PM (0)
Apr 16, 5-6 PM (0)
Apr 16, 6-7 PM (1)
Apr 16, 7-8 PM (0)
Apr 16, 8-9 PM (0)
Apr 16, 9-10 PM (0)
Apr 16, 10-11 PM (0)
Apr 16, 11-12 AM (0)
Apr 17, 12-1 AM (1)
Apr 17, 1-2 AM (1)
Apr 17, 2-3 AM (0)
Apr 17, 3-4 AM (0)
Apr 17, 4-5 AM (0)
Apr 17, 5-6 AM (0)
Apr 17, 6-7 AM (0)
Apr 17, 7-8 AM (0)
Apr 17, 8-9 AM (0)
Apr 17, 9-10 AM (0)
Apr 17, 10-11 AM (0)
Apr 17, 11-12 PM (0)
Apr 17, 12-1 PM (0)
Apr 17, 1-2 PM (0)
Apr 17, 2-3 PM (0)
Apr 17, 3-4 PM (0)
Apr 17, 4-5 PM (0)
Apr 17, 5-6 PM (1)
Apr 17, 6-7 PM (0)
Apr 17, 7-8 PM (0)
Apr 17, 8-9 PM (0)
Apr 17, 9-10 PM (0)
Apr 17, 10-11 PM (0)
Apr 17, 11-12 AM (0)
Apr 18, 12-1 AM (0)
Apr 18, 1-2 AM (0)
Apr 18, 2-3 AM (1)
Apr 18, 3-4 AM (0)
Apr 18, 4-5 AM (0)
Apr 18, 5-6 AM (0)
Apr 18, 6-7 AM (0)
Apr 18, 7-8 AM (0)
Apr 18, 8-9 AM (0)
Apr 18, 9-10 AM (0)
Apr 18, 10-11 AM (0)
Apr 18, 11-12 PM (0)
Apr 18, 12-1 PM (0)
Apr 18, 1-2 PM (0)
Apr 18, 2-3 PM (0)
Apr 18, 3-4 PM (0)
Apr 18, 4-5 PM (0)
Apr 18, 5-6 PM (0)
Apr 18, 6-7 PM (0)
Apr 18, 7-8 PM (0)
Apr 18, 8-9 PM (1)
Apr 18, 9-10 PM (0)
Apr 18, 10-11 PM (0)
Apr 18, 11-12 AM (0)
Apr 19, 12-1 AM (0)
Apr 19, 1-2 AM (0)
Apr 19, 2-3 AM (0)
Apr 19, 3-4 AM (0)
Apr 19, 4-5 AM (0)
Apr 19, 5-6 AM (0)
Apr 19, 6-7 AM (0)
Apr 19, 7-8 AM (0)
Apr 19, 8-9 AM (0)
Apr 19, 9-10 AM (0)
Apr 19, 10-11 AM (0)
Apr 19, 11-12 PM (0)
Apr 19, 12-1 PM (0)
Apr 19, 1-2 PM (0)
Apr 19, 2-3 PM (0)
Apr 19, 3-4 PM (0)
Apr 19, 4-5 PM (0)
Apr 19, 5-6 PM (0)
Apr 19, 6-7 PM (0)
Apr 19, 7-8 PM (0)
Apr 19, 8-9 PM (0)
Apr 19, 9-10 PM (0)
Apr 19, 10-11 PM (0)
Apr 19, 11-12 AM (0)
Apr 20, 12-1 AM (0)
Apr 20, 1-2 AM (0)
Apr 20, 2-3 AM (0)
Apr 20, 3-4 AM (0)
Apr 20, 4-5 AM (0)
Apr 20, 5-6 AM (0)
Apr 20, 6-7 AM (0)
Apr 20, 7-8 AM (0)
Apr 20, 8-9 AM (0)
Apr 20, 9-10 AM (0)
Apr 20, 10-11 AM (0)
Apr 20, 11-12 PM (0)
Apr 20, 12-1 PM (5)
Apr 20, 1-2 PM (0)
Apr 20, 2-3 PM (5)
Apr 20, 3-4 PM (0)
Apr 20, 4-5 PM (3)
Apr 20, 5-6 PM (0)
Apr 20, 6-7 PM (0)
Apr 20, 7-8 PM (0)
Apr 20, 8-9 PM (0)
Apr 20, 9-10 PM (0)
Apr 20, 10-11 PM (0)
Apr 20, 11-12 AM (0)
Apr 21, 12-1 AM (0)
Apr 21, 1-2 AM (0)
Apr 21, 2-3 AM (0)
Apr 21, 3-4 AM (0)
Apr 21, 4-5 AM (0)
Apr 21, 5-6 AM (0)
Apr 21, 6-7 AM (0)
Apr 21, 7-8 AM (0)
Apr 21, 8-9 AM (0)
Apr 21, 9-10 AM (0)
Apr 21, 10-11 AM (0)
Apr 21, 11-12 PM (1)
Apr 21, 12-1 PM (1)
Apr 21, 1-2 PM (5)
Apr 21, 2-3 PM (3)
Apr 21, 3-4 PM (0)
Apr 21, 4-5 PM (0)
Apr 21, 5-6 PM (0)
Apr 21, 6-7 PM (3)
Apr 21, 7-8 PM (3)
Apr 21, 8-9 PM (0)
Apr 21, 9-10 PM (0)
Apr 21, 10-11 PM (0)
Apr 21, 11-12 AM (0)
Apr 22, 12-1 AM (0)
Apr 22, 1-2 AM (0)
Apr 22, 2-3 AM (0)
Apr 22, 3-4 AM (0)
Apr 22, 4-5 AM (0)
Apr 22, 5-6 AM (0)
Apr 22, 6-7 AM (0)
Apr 22, 7-8 AM (0)
Apr 22, 8-9 AM (0)
Apr 22, 9-10 AM (0)
42 commits this week Apr 15, 2026 - Apr 22, 2026
feat(newsfeed): make newsfeed URLs build-time configurable
Replace hardcoded newsfeed.daedalus.io and newsfeed.daedaluswallet.io
with NEWS_URL / NEWS_HASH_URL webpack EnvironmentPlugin variables so
installers can be built pointing at a test server. Supports both http://
and https:// schemes; hostname, protocol, and port are parsed from the
full URL and forwarded to externalRequest.
feat(release-tool): add drt — Daedalus release CLI
Adds the drt (Daedalus Release Tool) Rust CLI, replacing the old
proposal-ui Haskell tool.

Commands:
  drt fetch-installers  — download unsigned installers from a Hydra eval
  drt sign              — GPG + macOS/Windows code signing via SSH hosts
  drt release           — hash, sign, upload to S3, push version JSON
  drt serve             — local HTTP mirror for end-to-end tester workflows
                          (generates newsfeed + verification files on the fly)

Nix:
  - Add crane + fenix flake inputs for Rust builds
  - Add perSystem/release-cli.nix (drt package + devShell + checks)
  - Add ops/ direnv environment for signing credentials
feat(ci): add JS/TS checks to hydraJobs.required
Replaces verify_pr.yml with Nix-native checks: lint (ESLint), compile
(tsc --noEmit), stylelint, i18n, storybook build, jest, shellcheck, and
treefmt. All run on x86_64-linux, reusing the installer's node_modules
derivation to avoid a redundant yarn install.

chore(ci): remove verify_pr.yml GitHub Actions workflow

Replaced by Nix checks in hydraJobs.required.

chore(ci): remove netlify.toml

Storybook build is now covered by the Nix checks in hydraJobs.required.
Netlify deploy previews were not being used.

chore(ci): make only checks required, not installers or devshells

Installers and devshells remain in hydraJobs for Hydra to build but
are no longer blocking PR merges.

chore(ci): add nonrequired aggregate for installers and devshells
feat(drt): signing improvements and fetch metadata
- sign: add --skip-upload (reuse already-uploaded file on signing host),
  --skip-darwin, --skip-darwin-legacy, --skip-windows flags for targeted
  re-testing without re-running successful platforms
- sign: fix macOS keychain unlock — source signing.sh, unlock-keychain,
  add to search list before productsign; use local vars in do_sign so
  declare -f serialises correctly for sudo subprocess
- sign: cd /tmp and rm stale signed output as root before sudo to avoid
  Permission denied on leftover files from previous runs
- fetch: write meta.json instead of plain version file; captures gitrev,
  nar_hash, env, and eval_url from the Hydra eval's flake field
- installers: add Meta struct; InstallerDir.load() tries meta.json first,
  falls back to plain version file for backwards compatibility
- ops devshell: add serve step (step 3) between sign and release
fix(signing): unlock keychain and add to search list before productsign
productsign fails with errSecInteractionNotAllowed when the signing
keychain is locked, and can't find the identity if the keychain isn't
in the user's search list.

Fix: source signing.sh (which exports $KEYCHAIN), unlock the keychain,
and prepend it to the keychain search list before calling productsign.
feat(release-tool): add drt — Daedalus release CLI
Adds `drt` (Daedalus Release Tool), a Rust CLI that replaces the
legacy Haskell `proposal-ui` for release operations.

Commands:
  drt fetch-installers  download unsigned installers from a Hydra eval
  drt sign              code-sign (macOS/Windows via SSH) + GPG-sign
  drt release           hash, GPG-sign, upload to S3, push version JSON
  drt serve             local HTTP mirror for end-to-end tester workflows

Key details:
- Hash algorithm: CBOR-wrapped Blake2b-256 matching Haskell installerHash
- macOS signing: SSH to OSX_SIGN_HOST, productsign with buildkite-agent
  credentials; mirrors sudo-to-buildkite-agent-default logic from nix
- Windows signing: pipe .exe directly through ssh WIN_SIGN_HOST (HSM,
  ProxyJump via deployer in ~/.ssh/config)
- S3 upload: hash-keyed object + filename copy, public-read ACL
- Nix: crane + fenix build; devShells.ops (drt + gpg only, no Yarn);
  devShells.release-cli (full Rust toolchain for development)
- ops/.envrc: loads .envrc.local for OSX_SIGN_HOST/WIN_SIGN_HOST/GPG_USER

Also fixes macOS installer signing: uncomment security unlock-keychain
call in makeSignedInstaller so productsign can access the signing
keychain without errSecInteractionNotAllowed in non-interactive sessions.