git.iko.soy/typeable/nixpkgs
on master help sign in
lemmy: use pin.json to prepare for update script

lemmy: add initial update script lemmy: remove use of upstream package.json lemmy: add update script lemmy: fixes lemmy: use importJSON lemmy: use correct import json ref

commitf1d3cdcf58803275486579e3e088d4d333672eff authorhappysalada <raphael@megzari.com> dateFri 29 Oct 2021, 10:07 (5 years ago) parent9a3e6e2
5 files changed+66−124
pkgs/servers/web-apps/lemmy/package.json−113 pkgs/servers/web-apps/lemmy/pin.json+7 pkgs/servers/web-apps/lemmy/server.nix+9−4 pkgs/servers/web-apps/lemmy/ui.nix+7−7 pkgs/servers/web-apps/lemmy/update.sh+43
pkgs/servers/web-apps/lemmy/package.jsondeleted−113
@@ -1,113 +0,0 @@
1−{
2− "name": "lemmy-ui",
3− "version": "0.12.2",
4− "description": "An isomorphic UI for lemmy",
5− "author": "Dessalines <tyhou13@gmx.com>",
6− "license": "AGPL-3.0",
7− "scripts": {
8− "build:dev": "webpack --mode=development",
9− "build:prod": "webpack --mode=production",
10− "clean": "yarn run rimraf dist",
11− "dev": "yarn start",
12− "lint": "node generate_translations.js && tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx src",
13− "prebuild:dev": "yarn clean && node generate_translations.js",
14− "prebuild:prod": "yarn clean && node generate_translations.js",
15− "start": "yarn build:dev --watch"
16− },
17− "repository": "https://github.com/LemmyNet/lemmy-ui",
18− "dependencies": {
19− "@typescript-eslint/parser": "^4.28.3",
20− "autosize": "^5.0.1",
21− "choices.js": "^9.0.1",
22− "emoji-short-name": "^1.0.0",
23− "express": "~4.17.1",
24− "i18next": "^20.3.3",
25− "inferno": "^7.4.9",
26− "inferno-create-element": "^7.4.9",
27− "inferno-helmet": "^5.2.1",
28− "inferno-hydrate": "^7.4.9",
29− "inferno-i18next": "github:nimbusec-oss/inferno-i18next#semver:^7.4.2",
30− "inferno-router": "^7.4.9",
31− "inferno-server": "^7.4.9",
32− "isomorphic-cookie": "^1.2.4",
33− "jwt-decode": "^3.1.2",
34− "markdown-it": "^12.1.0",
35− "markdown-it-container": "^3.0.0",
36− "markdown-it-sub": "^1.0.0",
37− "markdown-it-sup": "^1.0.0",
38− "moment": "^2.29.1",
39− "reconnecting-websocket": "^4.4.0",
40− "register-service-worker": "^1.7.2",
41− "rxjs": "^7.2.0",
42− "serialize-javascript": "^6.0.0",
43− "tippy.js": "^6.3.1",
44− "toastify-js": "^1.11.1",
45− "tributejs": "^5.1.3",
46− "ws": "^8.2.0"
47− },
48− "devDependencies": {
49− "@babel/core": "^7.14.6",
50− "@babel/plugin-transform-runtime": "^7.14.5",
51− "@babel/plugin-transform-typescript": "^7.14.6",
52− "@babel/preset-env": "7.15.0",
53− "@babel/preset-typescript": "^7.14.5",
54− "@babel/runtime": "^7.14.6",
55− "@types/autosize": "^4.0.0",
56− "@types/express": "^4.17.13",
57− "@types/node": "^16.7.1",
58− "@types/node-fetch": "^2.5.11",
59− "@types/serialize-javascript": "^5.0.1",
60− "@typescript-eslint/eslint-plugin": "^4.28.3",
61− "babel-loader": "^8.2.2",
62− "babel-plugin-inferno": "^6.3.0",
63− "bootstrap": "^5.0.2",
64− "bootswatch": "^5.0.2",
65− "clean-webpack-plugin": "^4.0.0-alpha.0",
66− "copy-webpack-plugin": "^9.0.1",
67− "css-loader": "^6.0.0",
68− "eslint": "^7.30.0",
69− "eslint-plugin-prettier": "^3.4.1",
70− "husky": "^7.0.1",
71− "import-sort-style-module": "^6.0.0",
72− "iso-639-1": "^2.1.9",
73− "lemmy-js-client": "0.12.0",
74− "lint-staged": "^11.0.1",
75− "mini-css-extract-plugin": "^2.1.0",
76− "node-fetch": "^2.6.1",
77− "node-sass": "^6.0.1",
78− "prettier": "^2.3.2",
79− "prettier-plugin-import-sort": "^0.0.7",
80− "prettier-plugin-organize-imports": "^2.2.0",
81− "prettier-plugin-packagejson": "^2.2.11",
82− "rimraf": "^3.0.2",
83− "run-node-webpack-plugin": "^1.3.0",
84− "sass-loader": "^12.1.0",
85− "sortpack": "^2.2.0",
86− "style-loader": "^3.1.0",
87− "terser": "^5.7.1",
88− "typescript": "^4.3.5",
89− "webpack": "5.51.1",
90− "webpack-cli": "^4.7.2",
91− "webpack-dev-server": "4.0.0",
92− "webpack-node-externals": "^3.0.0"
93− },
94− "engines": {
95− "node": ">=8.9.0"
96− },
97− "engineStrict": true,
98− "lint-staged": {
99− "*.{ts,tsx,js}": [
100− "prettier --write",
101− "eslint --fix"
102− ],
103− "package.json": [
104− "sortpack"
105− ]
106− },
107− "importSort": {
108− ".js, .jsx, .ts, .tsx": {
109− "style": "module",
110− "parser": "typescript"
111− }
112− }
113−}
pkgs/servers/web-apps/lemmy/pin.jsonnew file+7
@@ -0,0 +1,7 @@
1+{
2+ "version": "0.12.2",
3+ "serverSha256": "sha256-jhUpQ2f+b0BEXVfQOIujxam2PQA44wluUraJVJxL6LU=",
4+ "serverCargoSha256": "sha256-2i8zCwd33LtUKxOChx/SLP9sWMRmxGkKK8xzaJImMHM=",
5+ "uiSha256": "sha256-iFLJqUnz4m9/JTSaJSUugzY5KkiKtH0sMYY4ALm2Ebk=",
6+ "uiYarnDepsSha256": "sha256-i12J+Qi7Nsjr5JipeRXdkFkh+I/ROsgRw4Vty2cMNyU="
7+}
pkgs/servers/web-apps/lemmy/server.nix+9−4
@@ -7,19 +7,22 @@
77, libiconv
88, Security
99}:
10−
10+let
11+ pinData = lib.importJSON ./pin.json;
12+ version = pinData.version;
13+in
1114rustPlatform.buildRustPackage rec {
15+ inherit version;
1216 pname = "lemmy-server";
13− version = "0.12.2";
1417
1518 src = fetchFromGitHub {
1619 owner = "LemmyNet";
1720 repo = "lemmy";
1821 rev = version;
19− sha256 = "sha256-jhUpQ2f+b0BEXVfQOIujxam2PQA44wluUraJVJxL6LU=";
22+ sha256 = pinData.serverSha256;
2023 };
2124
22− cargoSha256 = "sha256-2i8zCwd33LtUKxOChx/SLP9sWMRmxGkKK8xzaJImMHM=";
25+ cargoSha256 = pinData.serverCargoSha256;
2326
2427 buildInputs = [ postgresql ]
2528 ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
@@ -31,6 +34,8 @@ rustPlatform.buildRustPackage rec {
3134 OPENSSL_LIB_DIR = "${openssl.out}/lib";
3235 OPENSSL_INCLUDE_DIR = "${openssl.dev}/include";
3336
37+ passthru.updateScript = ./update.sh;
38+
3439 meta = with lib; {
3540 description = "🐀 Building a federated alternative to reddit in rust";
3641 homepage = "https://join-lemmy.org/";
pkgs/servers/web-apps/lemmy/ui.nix+7−7
@@ -9,6 +9,8 @@
99}:
1010
1111let
12+ pinData = lib.importJSON ./pin.json;
13+
1214 pkgConfig = {
1315 node-sass = {
1416 nativeBuildInputs = [ ];
@@ -21,14 +23,14 @@ let
2123 };
2224
2325 name = "lemmy-ui";
24− version = "0.12.2";
26+ version = pinData.version;
2527
2628 src = fetchFromGitHub {
2729 owner = "LemmyNet";
2830 repo = name;
2931 rev = version;
3032 fetchSubmodules = true;
31− sha256 = "sha256-iFLJqUnz4m9/JTSaJSUugzY5KkiKtH0sMYY4ALm2Ebk=";
33+ sha256 = pinData.uiSha256;
3234 };
3335in
3436mkYarnPackage {
@@ -39,13 +41,9 @@ mkYarnPackage {
3941
4042 offlineCache = fetchYarnDeps {
4143 yarnLock = src + "/yarn.lock";
42− sha256 = "sha256-i12J+Qi7Nsjr5JipeRXdkFkh+I/ROsgRw4Vty2cMNyU=";
44+ sha256 = pinData.uiYarnDepsSha256;
4345 };
4446
45− # Fails mysteriously on source/package.json
46− # Upstream package.json is missing a newline at the end
47− packageJSON = ./package.json;
48−
4947 yarnPreBuild = ''
5048 export npm_config_nodedir=${nodejs}
5149 '';
@@ -67,6 +65,8 @@ mkYarnPackage {
6765
6866 distPhase = "true";
6967
68+ passthru.updateScript = ./update.sh;
69+
7070 meta = with lib; {
7171 description = "Building a federated alternative to reddit in rust";
7272 homepage = "https://join-lemmy.org/";
pkgs/servers/web-apps/lemmy/update.shnew file+43
@@ -0,0 +1,43 @@
1+#!/usr/bin/env nix-shell
2+#! nix-shell -i oil -p jq sd nix-prefetch-github ripgrep moreutils
3+
4+# TODO set to `verbose` or `extdebug` once implemented in oil
5+shopt --set xtrace
6+
7+var directory = $(dirname $0 | xargs realpath)
8+var owner = "LemmyNet"
9+var ui_repo = "lemmy-ui"
10+var server_repo = "lemmy"
11+var latest_rev = $(curl -q https://api.github.com/repos/${owner}/${server_repo}/releases/latest | \
12+ jq -r '.tag_name')
13+var latest_version = $(echo $latest_rev)
14+var current_version = $(jq -r '.version' $directory/pin.json)
15+if ($latest_version === $current_version) {
16+ echo "lemmy is already up-to-date"
17+ return 0
18+} else {
19+ var server_tarball_meta = $(nix-prefetch-github $owner $server_repo --rev "$latest_rev")
20+ var server_tarball_hash = "sha256-$(echo $server_tarball_meta | jq -r '.sha256')"
21+ var ui_tarball_meta = $(nix-prefetch-github $owner $ui_repo --rev "$latest_rev")
22+ var ui_tarball_hash = "sha256-$(echo $ui_tarball_meta | jq -r '.sha256')"
23+
24+ jq ".version = \"$latest_version\" | \
25+ .\"serverSha256\" = \"$server_tarball_hash\" | \
26+ .\"uiSha256\" = \"$ui_tarball_hash\" | \
27+ .\"serverCargoSha256\" = \"\" | \
28+ .\"uiYarnDepsSha256\" = \"\"" $directory/pin.json | sponge $directory/pin.json
29+
30+ var new_cargo_sha256 = $(nix-build -A lemmy-server 2>&1 | \
31+ tail -n 2 | \
32+ head -n 1 | \
33+ sd '\s+got:\s+' '')
34+
35+ var new_offline_cache_sha256 = $(nix-build -A lemmy-ui 2>&1 | \
36+ tail -n 2 | \
37+ head -n 1 | \
38+ sd '\s+got:\s+' '')
39+
40+ jq ".\"serverCargoSha256\" = \"$new_cargo_sha256\" | \
41+ .\"uiYarnDepsSha256\" = \"$new_offline_cache_sha256\"" \
42+ $directory/pin.json | sponge $directory/pin.json
43+}