From 5cb0f4a17b5a4d2ea85090a8a1023d8870a74d98 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 15 Dec 2024 14:42:32 -0500 Subject: [PATCH 1/5] Add wasm32-unknown-unknown target to toolchain file --- rust-toolchain.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e9743fb..a35fc6d 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,4 @@ - [toolchain] channel = "nightly" +targets = ["wasm32-unknown-unknown"] + -- 2.47.2 From 3ec25881b9784c5c78089e4a7f052c4ac6f0f22b Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 15 Dec 2024 14:42:48 -0500 Subject: [PATCH 2/5] Add Nix flake --- flake.lock | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..bcfd99e --- /dev/null +++ b/flake.lock @@ -0,0 +1,114 @@ +{ + "nodes": { + "cargo-leptos": { + "flake": false, + "locked": { + "lastModified": 1730677835, + "narHash": "sha256-Oe65m9io7ihymUjylaWHQM/x7r0y/xXqD313H3oyjN8=", + "owner": "leptos-rs", + "repo": "cargo-leptos", + "rev": "ff6b19a5f9fd4e433774b6a9c57922ea5a1634cc", + "type": "github" + }, + "original": { + "owner": "leptos-rs", + "ref": "v0.2.21", + "repo": "cargo-leptos", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1733940404, + "narHash": "sha256-Pj39hSoUA86ZePPF/UXiYHHM7hMIkios8TYG29kQT4g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5d67ea6b4b63378b9c13be21e2ec9d1afc921713", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1728538411, + "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "cargo-leptos": "cargo-leptos", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1734230139, + "narHash": "sha256-zsp0Mz8VgyIAnU8UhP/YT1g+zlsl+NIJTBMAbY+RifQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "150fbc8aa2bc501041810bbc1dbfe73694a861be", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1bf65cd --- /dev/null +++ b/flake.nix @@ -0,0 +1,102 @@ +{ + description = "LibreTunes build and development environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + flake-utils.url = "github:numtide/flake-utils"; + cargo-leptos = { + url = "github:leptos-rs/cargo-leptos?ref=v0.2.21"; + flake = false; + }; + }; + + outputs = { self, nixpkgs, rust-overlay, flake-utils, cargo-leptos, ... }: + flake-utils.lib.eachDefaultSystem (system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { + inherit system overlays; + }; + + # Build a specific version of cargo-leptos + cargo-leptos-build = pkgs.rustPlatform.buildRustPackage { + name = "cargo-leptos"; + buildFeatures = ["no_downloads"]; + src = cargo-leptos; + cargoHash = "sha256-pcjMMeSltCvYeMFlJs1hYUGIU9fUv50lydudTDCi23M="; + + nativeBuildInputs = with pkgs; [ + pkg-config + openssl + ]; + + doCheck = false; + }; + + buildPkgs = with pkgs; [ + (rust-bin.fromRustupToolchainFile ./rust-toolchain.toml) + cargo-leptos-build + clang + sass + openssl + postgresql + imagemagick + pkg-config + ]; + in + { + devShells.default = pkgs.mkShell { + LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; + + buildInputs = with pkgs; buildPkgs ++ [ + diesel-cli + ]; + + shellHook = '' + set -a + [[ -f .env ]] && source .env + set +a + ''; + }; + + packages.default = pkgs.rustPlatform.buildRustPackage { + name = "libretunes"; + src = ./.; + + cargoLock = { + lockFile = ./Cargo.lock; + }; + + LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; + + nativeBuildInputs = with pkgs; buildPkgs ++ [ + makeWrapper + ]; + + buildInputs = with pkgs; [ + openssl + imagemagick + ]; + + # TODO enable --release builds + # Creates an issue with cargo-leptos trying to create cache directories + # See https://github.com/leptos-rs/cargo-leptos/issues/79 + buildPhase = '' + cargo-leptos build --precompress #--release + ''; + + installPhase = '' + mkdir -p $out/bin + install -t $out target/debug/libretunes + cp -r target/site $out/site + + makeWrapper $out/libretunes $out/bin/libretunes \ + --set LEPTOS_SITE_ROOT $out/site + ''; + + doCheck = false; + }; + } + ); +} -- 2.47.2 From deca995de19f6351763afa35ac2191ffc006448d Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 15 Dec 2024 14:43:30 -0500 Subject: [PATCH 3/5] Ignore some Nix files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index f472188..8a7544c 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ playwright/.cache/ # Sass cache .sass-cache + +# Nix-related files +.direnv/ +result/ -- 2.47.2 From 832ba7a03bc41736e3e0d4749c613be909ea137e Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 15 Dec 2024 16:01:22 -0500 Subject: [PATCH 4/5] Exclude Nix and toolchain files from Docker ignore --- .dockerignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.dockerignore b/.dockerignore index 5ab2a05..8d304a8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,3 +9,6 @@ !/Cargo.lock !/Cargo.toml !/ascii_art.txt +!/flake.nix +!/flake.lock +!/rust-toolchain.toml -- 2.47.2 From 817529cbcc2f83c6fd0e31c1fe0d13186a8b0a69 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 15 Dec 2024 16:03:35 -0500 Subject: [PATCH 5/5] Add Nix build CICD job --- .gitea/workflows/push.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitea/workflows/push.yaml b/.gitea/workflows/push.yaml index 0fd4a4e..747bc19 100644 --- a/.gitea/workflows/push.yaml +++ b/.gitea/workflows/push.yaml @@ -73,3 +73,13 @@ jobs: with: name: docs path: target/doc + + nix-build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Nix + uses: cachix/install-nix-action@v27 + - name: Build project with Nix + run: nix build .#default --experimental-features 'nix-command flakes' -- 2.47.2