Skip to content

v2.0.0

Latest

Choose a tag to compare

@gmiliaras gmiliaras released this 29 Jul 16:10
5a96830

Overview

Version 2.0.0 replaces the Ruby runtime with a single native binary in Rust while preserving v1.8.x deployment behavior by default.

Highlights

  • Removes the Ruby runtime dependency entirely. One binary, no interpreter needed.
  • Expanded platform support, including Windows Server 2025, RHEL 10, Ubuntu 26.04, CentOS Stream 10.
  • Native systemd service management on Linux (no more SysV init.d compatibility layer).
  • Native Windows Service Control Manager integration (no more win32-daemon gem).
  • Built-in throttle handling with coordinated backoff across worker threads.
  • deploy-local is now a subcommand of the agent binary, with added support for GitHub sources (including private repos) and S3.
  • Optional loopback-only command port for local diagnostics without restarting the agent.
  • A set of opt-in security hardening flags for bundle validation, hook environments, and filesystem permissions.

Supported platforms

The agent has been tested on the following operating systems:

OS Versions Architectures
Amazon Linux 2023 latest x86_64, aarch64
Amazon Linux 2 latest x86_64, aarch64
RHEL 8, 9, 10 x86_64, aarch64
Oracle Linux 8, 9, 10 x86_64, aarch64
Rocky Linux 9, 10 x86_64, aarch64
CentOS Stream 9, 10 x86_64, aarch64
SLES 15 x86_64, aarch64
Debian 11, 12, 13 x86_64, aarch64
Ubuntu Server 16.04, 18.04, 20.04, 22.04, 24.04, 25.04, 26.04 x86_64, aarch64
Windows Server 2016, 2019, 2022, 2025 x86_64

New in 2.0.0: Windows Server 2025, RHEL 10, Oracle Linux 8/9/10, Rocky Linux 9/10, CentOS Stream 9/10, SLES 15, Debian 11/12/13, and Ubuntu 24.04/25.04/26.04.

Upgrade notes

Existing deployments continue to work without configuration changes. Review the following before upgrading:

  • Local deployment IDs changed. Local deploys now use the format local-<pid> instead of d-XXXXXXXXX-local. Scripts that key on this folder name need updating.
  • Core dumps disabled by default. The agent suppresses core dumps because it holds credentials in memory. Set disable_core_dumps: false if you need them for crash investigation.
  • Retired configuration keys are ignored. Keys like children, shared_dir, user, instance_service_*, and codedeploy_test_profile no longer have any effect. Each is logged once on startup.
  • Credential refresh. Rotated credentials are picked up in place without restarting the agent or failing long-running deployments.

Security improvements

The new agent introduces opt-in hardening controls. All default to v1-compatible behavior unless you enable them:

  • reject_symlinks_in_bundle — reject bundles containing symlinks or hardlinks.
  • reject_path_traversal_in_bundle — reject path-traversal attempts in archive entries and AppSpec fields.
  • reject_unsafe_permissions_in_bundle — reject SUID/SGID files and modes.
  • reject_unconfined_selinux_in_bundle — reject SELinux types that disable MAC.
  • reject_symlink_permission_targets — reject symlinked destinations in AppSpec permissions: blocks.
  • ignore_ownership_in_bundle — ignore uid/gid from tar headers; own extracted files as the agent process.
  • restrict_agent_dir_permissions — tighten agent directory and state file permissions.
  • restrict_log_dir_permissions — tighten log directory permissions.
  • restrict_hook_env_to_allowlist — limit hook environment to documented deployment variables only.
  • strip_loader_env_in_hooks — strip LD_PRELOAD/LD_LIBRARY_PATH/LD_AUDIT from hook environments.
  • disable_powershell_profile_in_hooks — run PowerShell hooks with -NoProfile -NonInteractive.
  • archive_max_extraction_size — cap uncompressed bundle size.

Always-on improvements (no flag needed):

  • Hook timeout enforcement uses SIGTERM then SIGKILL, preventing indefinite hangs.
  • scripts.log is size-rotated (64 MiB x 8 files).
  • ANSI escape sequences are stripped from logs shipped to CodeDeploy.

Compatibility

The following remain unchanged from v1.8.x:

  • AppSpec semantics (versions, file handling, permissions, ACLs, SELinux contexts)
  • Deployment lifecycle event ordering
  • Hook execution and rollback mapping
  • Deployment archive structure and ETag verification
  • PKCS7 signature verification
  • On-disk layout and tracking files
  • Existing configuration file syntax (including symbol-style :key: value format)
  • Error codes

Full changelog

For the complete technical list of changes, see CHANGELOG.md.