Implement release script

main
Brian Picciano 1 year ago
parent e9190e4dbb
commit 3a3bd56295
  1. 1
      README.md
  2. 36
      default.nix
  3. 32
      docs/dev/releases.md
  4. 19
      flake.nix
  5. 9
      nix/pkgs.nix
  6. 50
      release.nix
  7. 34
      release.sh

@ -100,6 +100,7 @@ Documentation for devs:
describing the [pmux](https://code.betamike.com/cryptic-io/pmux) process tree
created by `cryptic-net daemon` at runtime.
* [Rebuilding Documentation](docs/dev/rebuilding-documentation.md)
* [Releases](docs/dev/releases.md)
## Misc

@ -1,21 +1,25 @@
{
buildSystem ? builtins.currentSystem,
hostSystem ? builtins.currentSystem,
hostSystem ? buildSystem,
pkgsNix ? (import ./nix/pkgs.nix),
revision ? "",
releaseName ? "debug",
releaseName ? "dev",
bootstrap ? null,
}: let
pkgsNix = (import ./nix/pkgs.nix);
pkgs = pkgsNix.default {
inherit buildSystem hostSystem;
};
pkgsNative = pkgsNix.default {
inherit buildSystem;
hostSystem = buildSystem;
};
garageNix = (import ./nix/garage.nix);
in rec {
@ -23,17 +27,15 @@ in rec {
version = pkgs.stdenv.mkDerivation {
name = "cryptic-net-version";
inherit buildSystem revision releaseName;
inherit buildSystem hostSystem revision releaseName;
repoSrc = ./.;
nativeBuildInputs = [ pkgs.git ];
nativeBuildInputs = [ pkgsNative.git ];
goVersion = pkgs.go.version;
garageVersion = garageNix.version;
nixpkgsVersion = pkgsNix.version;
release = "${releaseName}-${hostSystem}";
builder = builtins.toFile "builder.sh" ''
source $stdenv/setup
@ -44,7 +46,8 @@ in rec {
revision="$(cd repoSrcCp && git rev-parse HEAD)"
fi
echo "Release $release" >> "$versionFile"
echo "Release: $releaseName" >> "$versionFile"
echo "Platform: $hostSystem" >> "$versionFile"
echo "Git Revision: $revision" >> "$versionFile"
echo "Go Version: $goVersion" >> "$versionFile"
echo "Garage Version: $garageVersion" >> "$versionFile"
@ -132,19 +135,4 @@ in rec {
mv Cryptic_Net-* "$out"/bin/cryptic-net
'';
};
release = pkgs.stdenv.mkDerivation {
name = "cryptic-net-release";
inherit appImage;
nativeBuildInputs = [ pkgs.coreutils ];
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
mkdir -p "$out"
cp "$appImage" "$out"/cryptic-net
(cd "$out" && sha256sum * > sha256.txt)
'';
};
}

@ -0,0 +1,32 @@
# Releases
A release consists of:
- A full set of binaries for all supported platforms, compiled from the same
source.
- A text file containing hashes of each binary.
- A file containing a signature of the hash file, created by whoever is building
the release.
## Building
*NOTE: This has only been tested from an x86_64 linux machine*
To create a release only a functional nix installation is required. Simply run
the `./release.sh` script, and input a release name when prompted.
From here a cryptic-net binary will be cross-compiled for all supported
platforms. This will take a long time the first time you perform it on your
machine.
Once compilation is completely, the release will be signed using the default GPG
key on your machine, and you will be prompted for its password in order to
create the signature.
## Releasing
Releases are uploaded to the repository's Releases page, and release naming
follows the conventional semantic versioning system. Each release should be
accompanied by a set of changes which have occurred since the last release,
described both in the `CHANGELOG.md` file and in the description on the Release
itself.

@ -7,12 +7,7 @@
self, utils,
}: let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"armv7l-linux" # rpi, I think?
"i686-linux"
];
supportedSystems = (import ./nix/pkgs.nix).supportedSystems;
mkPkg = (buildSystem: hostSystem: let
@ -26,15 +21,9 @@
defaultAttrs.appImage
);
#pkgsForBuildSystem = (buildSystem: builtins.foldl'
# (sysPkgs: hostSystem:
# sysPkgs // { "compiled-for-${hostSystem}" = mkPkg buildSystem hostSystem; })
# { default = mkPkg buildSystem buildSystem; }
# supportedSystems
#);
pkgsForBuildSystem = (buildSystem:
{ default = mkPkg buildSystem buildSystem; });
pkgsForBuildSystem = (buildSystem: {
default = mkPkg buildSystem buildSystem;
});
in {

@ -35,9 +35,16 @@ rec {
sha256 = "sha256-eFNm2h6fNbgD7ZpO4MHikCB5pSnCJ7DTmwPisjetmwc=";
};
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
#"armv7l-linux-musl" # rpi, I think?
"i686-linux"
];
default = {
buildSystem,
hostSystem,
hostSystem ? buildSystem,
}: import src {
system = buildSystem;
crossSystem.config = hostSystem;

@ -0,0 +1,50 @@
{
releaseName,
buildSystem ? builtins.currentSystem,
pkgsNix ? (import ./nix/pkgs.nix),
supportedSystems ? pkgsNix.supportedSystems,
}: let
pkgs = pkgsNix.default { inherit buildSystem; };
mkRelease = hostSystem: let
appImage = ((import ./default.nix) {
inherit buildSystem hostSystem releaseName;
}).appImage;
in pkgs.stdenv.mkDerivation {
name = "cryptic-net-release-${hostSystem}";
inherit releaseName appImage hostSystem;
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
mkdir -p "$out"/
cp "$appImage"/bin/cryptic-net "$out"/cryptic-net-$releaseName-$hostSystem
'';
};
releases = builtins.map mkRelease supportedSystems;
in
pkgs.stdenv.mkDerivation {
name = "cryptic-net-release-${releaseName}";
inherit releases;
nativeBuildInputs = [ pkgs.coreutils ];
builder = builtins.toFile "build.sh" ''
source $stdenv/setup
mkdir -p "$out"
for p in $releases; do
cp "$p"/cryptic-net-* "$out"/
done
(cd "$out" && sha256sum * > sha256.txt)
'';
}

@ -0,0 +1,34 @@
#!/usr/bin/env sh
set -e
scriptDir=$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)
cd "$scriptDir"
printf "Release name (e.g. \"v0.1.2\"): "
read -r releaseName
releasesDir="$(pwd)/releases"
mkdir -p "$releasesDir"
echo '*' > "$releasesDir"/.gitignore
out="$releasesDir/$releaseName"
if [ -e "$out" ]; then
echo "$out already exists, aborting"
exit 1
fi
result=$(nix-build \
--argstr releaseName "$releaseName" \
--no-out-link \
release.nix \
)
cp -rL "$result" "$out"
chmod u+w -R "$out"
cd "$out"
gpg -a --detach-sign -o sha256.txt.gpg ./sha256.txt
echo "Release successfully created: $out"
Loading…
Cancel
Save