mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 14:08:30 +00:00
92 lines
6.9 KiB
Plaintext
92 lines
6.9 KiB
Plaintext
---
|
|
sidebar_label: Changelog
|
|
---
|
|
|
|
# Changelog
|
|
|
|
## 0.7.1 (2026-06-02)
|
|
|
|
### Added
|
|
|
|
- **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`,
|
|
`dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`,
|
|
`dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`,
|
|
`dcr test --help`. All output uses styled headers (green) and usage lines (cyan).
|
|
- **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`,
|
|
`dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`,
|
|
`dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`.
|
|
- **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD,
|
|
Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew
|
|
(resource), Snap, GitHub Release assets.
|
|
- **Project name validation** — `dcr init` and `dcr new` now validate names before
|
|
creating files. Only ASCII letters, digits, `_` and `-` are allowed.
|
|
- **`documentation` and `homepage` fields** — added to `Cargo.toml`.
|
|
- **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`,
|
|
`panic = "abort"`, `strip = true` for smaller binaries.
|
|
- **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts.
|
|
- **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI.
|
|
- **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow.
|
|
- **Snap publishing** — automated Snapcraft publishing in CI.
|
|
- **Snap badge** — in README.
|
|
|
|
### Changed
|
|
|
|
- **`validate_package_name` made public** — callable from CLI commands.
|
|
- **README platform table** — reorganized: libc variants as separate OS rows,
|
|
removed extra columns. Linux architecture list updated.
|
|
- **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`.
|
|
- **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`.
|
|
- **README install commands** — `| bash` → `| sh` for POSIX compatibility.
|
|
|
|
### Fixed
|
|
|
|
- **`dcr new <invalid-name>` creates directory then fails** — validation now
|
|
happens before any file operations.
|
|
- **`dcr init` on invalid directory name** — same fix.
|
|
- **Man pages missing in installed packages** — now shipped in all formats.
|
|
- **Windows drive letter false positive** — in dependency file parser.
|
|
- **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings.
|
|
- **Newline after backslash not consumed** — in `parse_d_file` escape handling.
|
|
|
|
## 0.7.0 (2026-06-01)
|
|
|
|
### Added
|
|
|
|
- **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module.
|
|
- **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`.
|
|
- **`build.out_dir` config option** — custom output directory that overrides the default `target/<triple>/<profile>` path for final artifacts. Supported in `build`, `run`, and config validation.
|
|
- **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`.
|
|
- **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`).
|
|
- **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts.
|
|
- **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes.
|
|
- **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads.
|
|
- **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple.
|
|
- **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel.
|
|
- **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory).
|
|
- **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration.
|
|
|
|
### Changed
|
|
|
|
- **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`.
|
|
- **`build.standard` made optional** — changed from `String` to `Option<String>`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty.
|
|
- **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`.
|
|
- **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files.
|
|
- **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD.
|
|
- **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported".
|
|
- **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction.
|
|
|
|
### Fixed
|
|
|
|
- **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`.
|
|
- **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job.
|
|
- **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI.
|
|
- **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots.
|
|
- **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands.
|
|
- **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow.
|
|
- **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup.
|
|
|
|
### Removed
|
|
|
|
- **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`.
|
|
- **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`.
|