Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package hcloud-upload-image for 
openSUSE:Factory checked in at 2026-05-15 23:54:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hcloud-upload-image (Old)
 and      /work/SRC/openSUSE:Factory/.hcloud-upload-image.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hcloud-upload-image"

Fri May 15 23:54:27 2026 rev:6 rq:1353299 version:1.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/hcloud-upload-image/hcloud-upload-image.changes  
2026-01-13 21:24:17.446500896 +0100
+++ 
/work/SRC/openSUSE:Factory/.hcloud-upload-image.new.1966/hcloud-upload-image.changes
        2026-05-15 23:54:46.036213814 +0200
@@ -1,0 +2,39 @@
+Fri May 15 06:51:47 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.4.0:
+  * Features
+    - feat: faster writing to disk by skipping zero blocks (#165)
+    - docs: fix label value in comment (#161)
+    - feat: Add Nix support (#109)
+    - docs(nix): Add installation from nixpkgs, simplify others
+      (#164)
+  * Dependencies
+    - chore(deps): update module
+      github.com/apricote/hcloud-upload-image/hcloudimages to
+      v1.4.0 (#173)
+    - chore(main): release hcloudimages 1.4.0 (#166)
+    - chore(deps): update module
+      github.com/hetznercloud/hcloud-go/v2 to v2.40.0 (#155)
+    - feat: require Go 1.25 (#172)
+    - chore(deps): update actions/deploy-pages action to v5 (#167)
+    - chore(deps): update googleapis/release-please-action action
+      to v5 (#171)
+    - chore(deps): update actions/upload-pages-artifact action to
+      v5 (#170)
+    - chore(deps): update actions/configure-pages action to v6
+      (#168)
+    - chore(deps): update go toolchain directive to v1.26.3 (#162)
+    - chore(deps): update dependency golangci/golangci-lint to
+      v2.12.2 (#163)
+    - chore(deps): update dependency go to v1.26.0 (#154)
+    - chore(deps): update docker/login-action digest to 3227f53
+      (#150)
+    - chore(deps): update actions/checkout digest to de0fac2 (#156)
+    - chore(deps): update dependency golangci/golangci-lint to
+      v2.10.1 (#151)
+    - chore(deps): update goreleaser/goreleaser-action action to v7
+      (#158)
+    - chore(deps): update module
+      github.com/hetznercloud/hcloud-go/v2 to v2.34.0 (#152)
+
+-------------------------------------------------------------------

Old:
----
  hcloud-upload-image-1.3.0.obscpio

New:
----
  hcloud-upload-image-1.4.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ hcloud-upload-image.spec ++++++
--- /var/tmp/diff_new_pack.Snjcrc/_old  2026-05-15 23:54:47.280265023 +0200
+++ /var/tmp/diff_new_pack.Snjcrc/_new  2026-05-15 23:54:47.292265517 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           hcloud-upload-image
-Version:        1.3.0
+Version:        1.4.0
 Release:        0
 Summary:        Quickly upload any raw disk images into your Hetzner Cloud 
projects
 License:        MIT
@@ -27,7 +27,7 @@
 BuildRequires:  bash-completion
 BuildRequires:  fish
 BuildRequires:  zsh
-BuildRequires:  golang(API) >= 1.24
+BuildRequires:  golang(API) >= 1.25
 
 %description
 Quickly upload any raw disk images into your Hetzner Cloud projects!

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Snjcrc/_old  2026-05-15 23:54:47.604278361 +0200
+++ /var/tmp/diff_new_pack.Snjcrc/_new  2026-05-15 23:54:47.648280172 +0200
@@ -5,7 +5,7 @@
     <param name="exclude">.git</param>
     <param name="exclude">go.work</param>
     <param name="exclude">go.work.sum</param>
-    <param name="revision">v1.3.0</param>
+    <param name="revision">v1.4.0</param>
     <param name="match-tag">v*</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Snjcrc/_old  2026-05-15 23:54:47.820287252 +0200
+++ /var/tmp/diff_new_pack.Snjcrc/_new  2026-05-15 23:54:47.856288734 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/apricote/hcloud-upload-image/</param>
-              <param 
name="changesrevision">b440f8d7f6d465e706a86fd2edfe20ad3e1982bc</param></service></servicedata>
+              <param 
name="changesrevision">73af6a8a750a37d062bbb8e8dd4d09f17274f5a3</param></service></servicedata>
 (No newline at EOF)
 

++++++ hcloud-upload-image-1.3.0.obscpio -> hcloud-upload-image-1.4.0.obscpio 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/CHANGELOG.md 
new/hcloud-upload-image-1.4.0/CHANGELOG.md
--- old/hcloud-upload-image-1.3.0/CHANGELOG.md  2025-12-22 15:20:32.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/CHANGELOG.md  2026-05-14 20:52:38.000000000 
+0200
@@ -1,5 +1,14 @@
 # Changelog
 
+## 
[1.4.0](https://github.com/apricote/hcloud-upload-image/compare/v1.3.0...v1.4.0)
 (2026-05-14)
+
+
+### Features
+
+* Add Nix support 
([#109](https://github.com/apricote/hcloud-upload-image/issues/109)) 
([756f051](https://github.com/apricote/hcloud-upload-image/commit/756f0515707c58bd228349928a6c88f58f1fe56a))
+* faster writing to disk by skipping zero blocks 
([#165](https://github.com/apricote/hcloud-upload-image/issues/165)) 
([fc871af](https://github.com/apricote/hcloud-upload-image/commit/fc871afa8d9a5f468572cda0911537ecbf79fd58))
+* require Go 1.25 
([#172](https://github.com/apricote/hcloud-upload-image/issues/172)) 
([6a457b1](https://github.com/apricote/hcloud-upload-image/commit/6a457b11d3ea400e9ac8b6e25bbbb46168fe0ab5))
+
 ## 
[1.3.0](https://github.com/apricote/hcloud-upload-image/compare/v1.2.0...v1.3.0)
 (2025-12-22)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/README.md 
new/hcloud-upload-image-1.4.0/README.md
--- old/hcloud-upload-image-1.3.0/README.md     2025-12-22 15:20:32.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/README.md     2026-05-14 20:52:38.000000000 
+0200
@@ -58,6 +58,48 @@
 go install github.com/apricote/hcloud-upload-image@latest
 ```
 
+#### Nix/NixOS
+
+To run directly without installing (assumes flakes are enabled):
+
+```shell
+# Run the application directly
+nix run github:apricote/hcloud-upload-image
+```
+
+To install on your system from nixpkgs (assumes nixos-unstable):
+
+```nix
+{pkgs, ...}: {
+  environment.systemPackages = [ pkgs.hcloud-upload-image ];
+}
+```
+
+To install on your system (assumes flakes are enabled):
+
+```nix
+# flake.nix
+{
+  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+  inputs.hcloud-upload-image.url = "github:apricote/hcloud-upload-image";
+  inputs.hcloud-upload-image.inputs.nixpkgs.follows = "nixpkgs";
+
+  outputs = { self, nixpkgs, hcloud-upload-image }: {
+    nixosConfigurations.my-system = nixpkgs.lib.nixosSystem {
+      system = "x86_64-linux";
+      modules = [
+        ./configuration.nix
+        {
+          environment.systemPackages = [
+            hcloud-upload-image.packages.x86_64-linux.default
+          ];
+        }
+      ];
+    };
+  };
+}
+```
+
 #### Docker
 
 There is a docker image published at `ghcr.io/apricote/hcloud-upload-image`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/default.nix 
new/hcloud-upload-image-1.4.0/default.nix
--- old/hcloud-upload-image-1.3.0/default.nix   1970-01-01 01:00:00.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/default.nix   2026-05-14 20:52:38.000000000 
+0200
@@ -0,0 +1,35 @@
+{
+  lib,
+  buildGoModule,
+}:
+buildGoModule rec {
+  pname = "hcloud-upload-image";
+  version =
+    builtins.head (builtins.match ".*version = \"([0-9.]+)\".*"
+      (builtins.readFile ./internal/version/version.go));
+
+  src = ./.;
+  vendorHash = "sha256-CVdhf8pDBANzlZzaqaGPv+vUTOQB/K+LEIh8tZUTSnA=";
+  env.GOWORK = "off";
+  subPackages = ["."];
+  goSum = ./go.sum; # make sure to rebuild
+
+  postPatch = ''
+    echo 'replace github.com/apricote/hcloud-upload-image/hcloudimages => 
./hcloudimages' >> go.mod
+  '';
+
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  meta = {
+    description = "Quickly upload any raw disk images into your Hetzner Cloud 
projects";
+    homepage = "https://github.com/apricote/hcloud-upload-image";;
+    license = lib.licenses.mit;
+    maintainers = [];
+    mainProgram = "hcloud-upload-image";
+  };
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/flake.lock 
new/hcloud-upload-image-1.4.0/flake.lock
--- old/hcloud-upload-image-1.3.0/flake.lock    1970-01-01 01:00:00.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/flake.lock    2026-05-14 20:52:38.000000000 
+0200
@@ -0,0 +1,61 @@
+{
+  "nodes": {
+    "flake-parts": {
+      "inputs": {
+        "nixpkgs-lib": "nixpkgs-lib"
+      },
+      "locked": {
+        "lastModified": 1778716662,
+        "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1778443072,
+        "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs-lib": {
+      "locked": {
+        "lastModified": 1777168982,
+        "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
+        "owner": "nix-community",
+        "repo": "nixpkgs.lib",
+        "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "nixpkgs.lib",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-parts": "flake-parts",
+        "nixpkgs": "nixpkgs"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/flake.nix 
new/hcloud-upload-image-1.4.0/flake.nix
--- old/hcloud-upload-image-1.3.0/flake.nix     1970-01-01 01:00:00.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/flake.nix     2026-05-14 20:52:38.000000000 
+0200
@@ -0,0 +1,34 @@
+{
+  description = "hcloud-upload-image - Quickly upload any raw disk images into 
your Hetzner Cloud projects";
+
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+    flake-parts.url = "github:hercules-ci/flake-parts";
+  };
+
+  outputs = inputs @ {flake-parts, ...}:
+    flake-parts.lib.mkFlake {inherit inputs;} {
+      systems = [
+        "x86_64-linux"
+        "aarch64-linux"
+        "x86_64-darwin"
+        "aarch64-darwin"
+      ];
+
+      perSystem = {pkgs, ...}: let
+        pkg = pkgs.callPackage ./default.nix {};
+        app = {
+          type = "app";
+          program = "${pkg}/bin/hcloud-upload-image";
+        };
+      in {
+        packages.default = pkg;
+        packages.hcloud-upload-image = pkg;
+
+        apps.default = app;
+        apps.hcloud-upload-image = app;
+
+        devShells.default = pkgs.callPackage ./shell.nix {};
+      };
+    };
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/go.mod 
new/hcloud-upload-image-1.4.0/go.mod
--- old/hcloud-upload-image-1.3.0/go.mod        2025-12-22 15:20:32.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/go.mod        2026-05-14 20:52:38.000000000 
+0200
@@ -1,19 +1,19 @@
 module github.com/apricote/hcloud-upload-image
 
-go 1.24.0
+go 1.25.0
 
-toolchain go1.25.5
+toolchain go1.26.3
 
 require (
-       github.com/apricote/hcloud-upload-image/hcloudimages v1.3.0
-       github.com/hetznercloud/hcloud-go/v2 v2.33.0
+       github.com/apricote/hcloud-upload-image/hcloudimages v1.4.0
+       github.com/hetznercloud/hcloud-go/v2 v2.40.0
        github.com/spf13/cobra v1.10.2
 )
 
 require (
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
+       github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // 
indirect
        github.com/prometheus/client_golang v1.23.2 // indirect
@@ -24,9 +24,9 @@
        github.com/spf13/pflag v1.0.9 // indirect
        go.yaml.in/yaml/v2 v2.4.2 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.46.0 // indirect
-       golang.org/x/net v0.48.0 // indirect
-       golang.org/x/sys v0.39.0 // indirect
-       golang.org/x/text v0.32.0 // indirect
+       golang.org/x/crypto v0.51.0 // indirect
+       golang.org/x/net v0.53.0 // indirect
+       golang.org/x/sys v0.44.0 // indirect
+       golang.org/x/text v0.37.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/go.sum 
new/hcloud-upload-image-1.4.0/go.sum
--- old/hcloud-upload-image-1.3.0/go.sum        2025-12-22 15:20:32.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/go.sum        2026-05-14 20:52:38.000000000 
+0200
@@ -1,17 +1,18 @@
-github.com/apricote/hcloud-upload-image/hcloudimages v1.3.0 
h1:FVIKGSqpxdkO4+t1N8a8xu/xxc+13vHy2QaTAWICuQo=
-github.com/apricote/hcloud-upload-image/hcloudimages v1.3.0/go.mod 
h1:NiCZ7xGoYNbWeK9L083leB7/g5oa7SAOZq405XkUSeQ=
+github.com/apricote/hcloud-upload-image/hcloudimages v1.4.0 
h1:h9cxSQo8uYn7y5zLEOQF/GjLuXAqU9eVHt6vY/XIM1Y=
+github.com/apricote/hcloud-upload-image/hcloudimages v1.4.0/go.mod 
h1:9452aAvFQ28wGKZOMWS6djWvoQwqhbfUg6I2zEQIUXI=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod 
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cespare/xxhash/v2 v2.3.0 
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cpuguy83/go-md2man/v2 v2.0.6 
h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod 
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+github.com/cpuguy83/go-md2man/v2 v2.0.7 
h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
+github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod 
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/davecgh/go-spew v1.1.1 
h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/hetznercloud/hcloud-go/v2 v2.33.0 
h1:g9hwuo60IXbupXJCYMlO4xDXgxxMPuFk31iOpLXDCV4=
-github.com/hetznercloud/hcloud-go/v2 v2.33.0/go.mod 
h1:GzYEl7slIGKc6Ttt08hjiJvGj8/PbWzcQf6IUi02dIs=
+github.com/hetznercloud/hcloud-go/v2 v2.40.0 
h1:fuP7khfiDQAIXdKyQq7f3LnnOjyZg0PXTafXjUKkqIA=
+github.com/hetznercloud/hcloud-go/v2 v2.40.0/go.mod 
h1:ANz38eerXjPv00dm9dckKhttOGtYeeGmjjvwL5e6c5E=
 github.com/inconshreveable/mousetrap v1.1.0 
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod 
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/klauspost/compress v1.18.0 
h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
@@ -50,16 +51,16 @@
 go.yaml.in/yaml/v2 v2.4.2/go.mod 
h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
-golang.org/x/crypto v0.46.0/go.mod 
h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
-golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
-golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
-golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
-golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
-golang.org/x/term v0.38.0/go.mod 
h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
-golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
-golang.org/x/text v0.32.0/go.mod 
h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
+golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
+golang.org/x/crypto v0.51.0/go.mod 
h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
+golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
+golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
+golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
+golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
+golang.org/x/term v0.43.0/go.mod 
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
+golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
 google.golang.org/protobuf v1.36.8 
h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod 
h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/hcloudimages/CHANGELOG.md 
new/hcloud-upload-image-1.4.0/hcloudimages/CHANGELOG.md
--- old/hcloud-upload-image-1.3.0/hcloudimages/CHANGELOG.md     2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/CHANGELOG.md     2026-05-14 
20:52:38.000000000 +0200
@@ -1,5 +1,13 @@
 # Changelog
 
+## 
[1.4.0](https://github.com/apricote/hcloud-upload-image/compare/hcloudimages/v1.3.0...hcloudimages/v1.4.0)
 (2026-05-14)
+
+
+### Features
+
+* faster writing to disk by skipping zero blocks 
([#165](https://github.com/apricote/hcloud-upload-image/issues/165)) 
([fc871af](https://github.com/apricote/hcloud-upload-image/commit/fc871afa8d9a5f468572cda0911537ecbf79fd58))
+* require Go 1.25 
([#172](https://github.com/apricote/hcloud-upload-image/issues/172)) 
([6a457b1](https://github.com/apricote/hcloud-upload-image/commit/6a457b11d3ea400e9ac8b6e25bbbb46168fe0ab5))
+
 ## 
[1.3.0](https://github.com/apricote/hcloud-upload-image/compare/hcloudimages/v1.2.0...hcloudimages/v1.3.0)
 (2025-12-22)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/hcloudimages/client.go 
new/hcloud-upload-image-1.4.0/hcloudimages/client.go
--- old/hcloud-upload-image-1.3.0/hcloudimages/client.go        2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/client.go        2026-05-14 
20:52:38.000000000 +0200
@@ -91,7 +91,7 @@
        // Labels will be added to the resulting image (snapshot). Use these to 
filter the image list if you
        // need to identify the image later on.
        //
-       // We also always add a label 
`apricote.de/created-by=hcloud-image-upload` ([CreatedByLabel], 
[CreatedByValue]).
+       // We also always add a label 
`apricote.de/created-by=hcloud-upload-image` ([CreatedByLabel], 
[CreatedByValue]).
        Labels map[string]string
 
        // Location is the datacenter location for the temporary server.
@@ -543,7 +543,10 @@
 
        switch options.ImageFormat {
        case FormatRaw:
-               cmd += "dd of=/dev/sda bs=4M"
+               // With conv=sparse dd will skip any zero blocks and not write 
them to the disk, this makes it faster if you
+               // have a large raw image with multiple (nearly) empty but 
large partitions.
+               // For example Flatcar has ~12 GB, with ~90% being zero blocks.
+               cmd += "dd of=/dev/sda bs=4M conv=sparse"
        case FormatQCOW2:
                cmd += "tee image.qcow2 > /dev/null && qemu-img dd -f qcow2 -O 
raw if=image.qcow2 of=/dev/sda bs=4M"
        default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-upload-image-1.3.0/hcloudimages/client_test.go 
new/hcloud-upload-image-1.4.0/hcloudimages/client_test.go
--- old/hcloud-upload-image-1.3.0/hcloudimages/client_test.go   2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/client_test.go   2026-05-14 
20:52:38.000000000 +0200
@@ -24,21 +24,21 @@
                {
                        name:    "local raw",
                        options: UploadOptions{},
-                       want:    "bash -c 'set -euo pipefail && dd of=/dev/sda 
bs=4M && sync'",
+                       want:    "bash -c 'set -euo pipefail && dd of=/dev/sda 
bs=4M conv=sparse && sync'",
                },
                {
                        name: "remote raw",
                        options: UploadOptions{
                                ImageURL: 
mustParseURL("https://example.com/image.xz";),
                        },
-                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.xz\"; | dd of=/dev/sda bs=4M && sync'",
+                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.xz\"; | dd of=/dev/sda bs=4M conv=sparse && 
sync'",
                },
                {
                        name: "local xz",
                        options: UploadOptions{
                                ImageCompression: CompressionXZ,
                        },
-                       want: "bash -c 'set -euo pipefail && xz -cd | dd 
of=/dev/sda bs=4M && sync'",
+                       want: "bash -c 'set -euo pipefail && xz -cd | dd 
of=/dev/sda bs=4M conv=sparse && sync'",
                },
                {
                        name: "remote xz",
@@ -46,14 +46,14 @@
                                ImageURL:         
mustParseURL("https://example.com/image.xz";),
                                ImageCompression: CompressionXZ,
                        },
-                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.xz\"; | xz -cd | dd of=/dev/sda bs=4M && sync'",
+                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.xz\"; | xz -cd | dd of=/dev/sda bs=4M 
conv=sparse && sync'",
                },
                {
                        name: "local zstd",
                        options: UploadOptions{
                                ImageCompression: CompressionZSTD,
                        },
-                       want: "bash -c 'set -euo pipefail && zstd -cd | dd 
of=/dev/sda bs=4M && sync'",
+                       want: "bash -c 'set -euo pipefail && zstd -cd | dd 
of=/dev/sda bs=4M conv=sparse && sync'",
                },
                {
                        name: "remote zstd",
@@ -61,14 +61,14 @@
                                ImageURL:         
mustParseURL("https://example.com/image.zst";),
                                ImageCompression: CompressionZSTD,
                        },
-                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.zst\"; | zstd -cd | dd of=/dev/sda bs=4M && 
sync'",
+                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.zst\"; | zstd -cd | dd of=/dev/sda bs=4M 
conv=sparse && sync'",
                },
                {
                        name: "local bz2",
                        options: UploadOptions{
                                ImageCompression: CompressionBZ2,
                        },
-                       want: "bash -c 'set -euo pipefail && bzip2 -cd | dd 
of=/dev/sda bs=4M && sync'",
+                       want: "bash -c 'set -euo pipefail && bzip2 -cd | dd 
of=/dev/sda bs=4M conv=sparse && sync'",
                },
                {
                        name: "remote bz2",
@@ -76,7 +76,7 @@
                                ImageURL:         
mustParseURL("https://example.com/image.bz2";),
                                ImageCompression: CompressionBZ2,
                        },
-                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.bz2\"; | bzip2 -cd | dd of=/dev/sda bs=4M && 
sync'",
+                       want: "bash -c 'set -euo pipefail && wget --no-verbose 
-O - \"https://example.com/image.bz2\"; | bzip2 -cd | dd of=/dev/sda bs=4M 
conv=sparse && sync'",
                },
                {
                        name: "local qcow2",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/hcloudimages/go.mod 
new/hcloud-upload-image-1.4.0/hcloudimages/go.mod
--- old/hcloud-upload-image-1.3.0/hcloudimages/go.mod   2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/go.mod   2026-05-14 
20:52:38.000000000 +0200
@@ -1,13 +1,13 @@
 module github.com/apricote/hcloud-upload-image/hcloudimages
 
-go 1.24.0
+go 1.25.0
 
-toolchain go1.25.5
+toolchain go1.26.3
 
 require (
-       github.com/hetznercloud/hcloud-go/v2 v2.33.0
+       github.com/hetznercloud/hcloud-go/v2 v2.40.0
        github.com/stretchr/testify v1.11.1
-       golang.org/x/crypto v0.46.0
+       golang.org/x/crypto v0.51.0
 )
 
 require (
@@ -21,9 +21,9 @@
        github.com/prometheus/common v0.66.1 // indirect
        github.com/prometheus/procfs v0.16.1 // indirect
        go.yaml.in/yaml/v2 v2.4.2 // indirect
-       golang.org/x/net v0.48.0 // indirect
-       golang.org/x/sys v0.39.0 // indirect
-       golang.org/x/text v0.32.0 // indirect
+       golang.org/x/net v0.53.0 // indirect
+       golang.org/x/sys v0.44.0 // indirect
+       golang.org/x/text v0.37.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/hcloudimages/go.sum 
new/hcloud-upload-image-1.4.0/hcloudimages/go.sum
--- old/hcloud-upload-image-1.3.0/hcloudimages/go.sum   2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/go.sum   2026-05-14 
20:52:38.000000000 +0200
@@ -6,8 +6,8 @@
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/hetznercloud/hcloud-go/v2 v2.33.0 
h1:g9hwuo60IXbupXJCYMlO4xDXgxxMPuFk31iOpLXDCV4=
-github.com/hetznercloud/hcloud-go/v2 v2.33.0/go.mod 
h1:GzYEl7slIGKc6Ttt08hjiJvGj8/PbWzcQf6IUi02dIs=
+github.com/hetznercloud/hcloud-go/v2 v2.40.0 
h1:fuP7khfiDQAIXdKyQq7f3LnnOjyZg0PXTafXjUKkqIA=
+github.com/hetznercloud/hcloud-go/v2 v2.40.0/go.mod 
h1:ANz38eerXjPv00dm9dckKhttOGtYeeGmjjvwL5e6c5E=
 github.com/klauspost/compress v1.18.0 
h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
 github.com/klauspost/compress v1.18.0/go.mod 
h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -36,16 +36,16 @@
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
 go.yaml.in/yaml/v2 v2.4.2/go.mod 
h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
-golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
-golang.org/x/crypto v0.46.0/go.mod 
h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
-golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
-golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
-golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
-golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
-golang.org/x/term v0.38.0/go.mod 
h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
-golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
-golang.org/x/text v0.32.0/go.mod 
h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
+golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
+golang.org/x/crypto v0.51.0/go.mod 
h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
+golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
+golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
+golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
+golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
+golang.org/x/term v0.43.0/go.mod 
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
+golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
 google.golang.org/protobuf v1.36.8 
h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod 
h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-upload-image-1.3.0/hcloudimages/internal/control/retry.go 
new/hcloud-upload-image-1.4.0/hcloudimages/internal/control/retry.go
--- old/hcloud-upload-image-1.3.0/hcloudimages/internal/control/retry.go        
2025-12-22 15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/internal/control/retry.go        
2026-05-14 20:52:38.000000000 +0200
@@ -9,7 +9,7 @@
        "time"
 
        "github.com/hetznercloud/hcloud-go/v2/hcloud"
-       
+
        "github.com/apricote/hcloud-upload-image/hcloudimages/contextlogger"
 )
 
@@ -21,7 +21,7 @@
 
        backoffFunc := 
hcloud.ExponentialBackoffWithOpts(hcloud.ExponentialBackoffOpts{Multiplier: 2, 
Base: 200 * time.Millisecond, Cap: 2 * time.Second})
 
-       for try := 0; try < maxTries; try++ {
+       for try := range maxTries {
                if ctx.Err() != nil {
                        return ctx.Err()
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-upload-image-1.3.0/hcloudimages/internal/labelutil/labels.go 
new/hcloud-upload-image-1.4.0/hcloudimages/internal/labelutil/labels.go
--- old/hcloud-upload-image-1.3.0/hcloudimages/internal/labelutil/labels.go     
2025-12-22 15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/hcloudimages/internal/labelutil/labels.go     
2026-05-14 20:52:38.000000000 +0200
@@ -1,16 +1,14 @@
 package labelutil
 
+import "maps"
+
 import "fmt"
 
 func Merge(a, b map[string]string) map[string]string {
        result := make(map[string]string, len(a)+len(b))
 
-       for k, v := range a {
-               result[k] = v
-       }
-       for k, v := range b {
-               result[k] = v
-       }
+       maps.Copy(result, a)
+       maps.Copy(result, b)
 
        return result
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/hcloud-upload-image-1.3.0/internal/version/version.go 
new/hcloud-upload-image-1.4.0/internal/version/version.go
--- old/hcloud-upload-image-1.3.0/internal/version/version.go   2025-12-22 
15:20:32.000000000 +0100
+++ new/hcloud-upload-image-1.4.0/internal/version/version.go   2026-05-14 
20:52:38.000000000 +0200
@@ -2,7 +2,7 @@
 
 var (
        // version is a semver version (https://semver.org).
-       version = "1.3.0" // x-release-please-version
+       version = "1.4.0" // x-release-please-version
 
        // versionPrerelease is a semver version pre-release identifier 
(https://semver.org).
        //
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hcloud-upload-image-1.3.0/shell.nix 
new/hcloud-upload-image-1.4.0/shell.nix
--- old/hcloud-upload-image-1.3.0/shell.nix     1970-01-01 01:00:00.000000000 
+0100
+++ new/hcloud-upload-image-1.4.0/shell.nix     2026-05-14 20:52:38.000000000 
+0200
@@ -0,0 +1,9 @@
+{pkgs ? import <nixpkgs> {}}:
+pkgs.mkShell {
+  buildInputs = with pkgs; [
+    go
+    gopls
+    gotools
+    go-tools
+  ];
+}

++++++ hcloud-upload-image.obsinfo ++++++
--- /var/tmp/diff_new_pack.Snjcrc/_old  2026-05-15 23:54:48.680322655 +0200
+++ /var/tmp/diff_new_pack.Snjcrc/_new  2026-05-15 23:54:48.688322984 +0200
@@ -1,5 +1,5 @@
 name: hcloud-upload-image
-version: 1.3.0
-mtime: 1766413232
-commit: b440f8d7f6d465e706a86fd2edfe20ad3e1982bc
+version: 1.4.0
+mtime: 1778784758
+commit: 73af6a8a750a37d062bbb8e8dd4d09f17274f5a3
 

++++++ vendor.tar.gz ++++++
++++ 73645 lines of diff (skipped)

Reply via email to