diff --git a/flake.lock b/flake.lock index a09b72c..3f863b4 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1760007940, - "narHash": "sha256-Y9DWYZCSFCdPmgK9W9SkYrUreAV7+5y8RIzAO7eRhvA=", - "ref": "refs/heads/dev-v0.10.0", - "rev": "522f9548c77de5691eca3bd69ee177209b927f01", - "revCount": 13727, + "lastModified": 1765468009, + "narHash": "sha256-P3TSUFom4WpHuTuNvPiIn2Dz6Pg95PKs7qIJhkVfg8Q=", + "ref": "refs/heads/dev-v0.11.0", + "rev": "0dcb8add1fcc4a7f1eb1b4b00859cb6ad0eaf0a8", + "revCount": 14883, "type": "git", "url": "ssh://git@github.com/Foundation-Devices/KeyOS" }, diff --git a/scripts/make_release.sh b/scripts/make_release.sh index c76202f..1f81b21 100755 --- a/scripts/make_release.sh +++ b/scripts/make_release.sh @@ -108,6 +108,8 @@ elif [ "$#" -ge 4 ] && [ "$4" = "--reboot-required" ]; then fi START_DIR=$(pwd) +OUTPUT_ROOT_DIR="updates" +mkdir -p "$OUTPUT_ROOT_DIR" info "checking required directories and tools" @@ -145,6 +147,9 @@ fi OLD_VERSION=${OLD_VERSION_DIR##*/} NEW_VERSION=${NEW_VERSION_DIR##*/} +UPDATE_DIR="$OUTPUT_ROOT_DIR/${OLD_VERSION}-${NEW_VERSION}" +mkdir -p "$UPDATE_DIR" + # Strip the 'v'. OLD_VERSION_NO_V=${OLD_VERSION#v} NEW_VERSION_NO_V=${NEW_VERSION#v} @@ -175,10 +180,10 @@ SIGNED_SHA256=$(sha256sum ./release.tar | awk '{print $1}') info "generating @manifest.json" RELEASE_DATE=$(date +%Y-%m-%d) -UPDATE_FILENAME="release-${OLD_VERSION}-${NEW_VERSION}.tar" -SIGNATURE_FILENAME="release-${OLD_VERSION}-${NEW_VERSION}.tar.sig" +UPDATE_FILENAME="release.tar" +SIGNATURE_FILENAME="release.tar.sig" -cat > "manifest-${OLD_VERSION}-${NEW_VERSION}.json" < "$UPDATE_DIR/manifest.json" < "boot-$OLD_VERSION-$NEW_VERSION.img.gz" +gzip -c "$UPDATE_DIR/boot.img" > "$UPDATE_DIR/boot.img.gz" -mv release.tar "release-$OLD_VERSION-$NEW_VERSION.tar" +if [ -f release.tar.sig ]; then + mv release.tar.sig "$UPDATE_DIR/release.tar.sig" +fi +mv release.tar "$UPDATE_DIR/release.tar" info "done" diff --git a/scripts/make_release_input_dir.sh b/scripts/make_release_input_dir.sh index 716149f..2d8a684 100755 --- a/scripts/make_release_input_dir.sh +++ b/scripts/make_release_input_dir.sh @@ -70,14 +70,36 @@ fi cd "$KEYOS_DIR" +info "checking 'keyos' git status" + +if [ ! -d .git ]; then + error "keyos directory at '$(pwd)' is not a git repository" + exit 1 +fi + +if [ -n "$(git status --porcelain)" ]; then + error "keyos repository at '$(pwd)' has uncommitted changes. Please commit or stash them before running this script." + exit 1 +fi + +KEYOS_COMMIT=$(git rev-parse HEAD) + info "generating firmware components in 'keyos'" -cargo xtask build-all --dont-sign +cargo xtask build --dont-sign --reproducible cd "$START_DIR" info "preparing release input directory" mkdir "$FIRMWARE_VERSION" +COMMITS_FILE="$START_DIR/keyos-commits.txt" +if [ -f "$COMMITS_FILE" ]; then + tmp_file="${COMMITS_FILE}.tmp" + grep -v -F "$FIRMWARE_VERSION " "$COMMITS_FILE" > "$tmp_file" || true + mv "$tmp_file" "$COMMITS_FILE" +fi +echo "$FIRMWARE_VERSION $KEYOS_COMMIT" >> "$COMMITS_FILE" + cp "$KEYOS_DIR/target/armv7a-unknown-xous-elf/release/images/app.bin" "$FIRMWARE_VERSION" cp -r "$KEYOS_DIR/target/armv7a-unknown-xous-elf/release/apps/" "$FIRMWARE_VERSION" diff --git a/tools/release-gen/src/main.rs b/tools/release-gen/src/main.rs index 32f5585..982cc8f 100644 --- a/tools/release-gen/src/main.rs +++ b/tools/release-gen/src/main.rs @@ -169,6 +169,11 @@ Please make sure it's in your PATH or specify the path where it is installed. Se String::from_utf8_lossy(&output.stderr) ); + let patch_metadata = fs::metadata(&patch_file).with_context(|| { + format!("Reading patch file metadata: {}", abs_path(&patch_file)) + })?; + let patch_size = patch_metadata.len(); + let file = base_file.to_str().expect(PATH_TO_STR_ERROR).to_string(); actions.push(Action::Patch { @@ -177,7 +182,11 @@ Please make sure it's in your PATH or specify the path where it is installed. Se base_version: args.base_version.clone(), new_version: args.new_version.clone(), }); - println!("[INFO] action/patch: {}", base_file.display()); + println!( + "[INFO] action/patch ({}): {}", + format_size(patch_size), + base_file.display(), + ); } } } @@ -343,3 +352,16 @@ fn abs_path>(path: P) -> impl Display { .to_string_lossy() .to_string() } + +fn format_size(bytes: u64) -> String { + const KB: u64 = 1024; + const MB: u64 = KB * 1024; + + if bytes >= MB { + format!("{:.2} MB", bytes as f64 / MB as f64) + } else if bytes >= KB { + format!("{:.0} KB", bytes as f64 / KB as f64) + } else { + format!("{bytes} B") + } +}