Skip to content

Commit 78026df

Browse files
mhanbergdoorgan
andauthored
refactor: justfile, flake (#35)
* refactor: integrate GenLSP * fixup!: fix tests * fixup!: use persistent_term instead of adding .lsp to Project * fixup!: fix dialyzer issues * fixup!: Don't use parenthesis on 0-arity function * fixup!: cleanup credo changes * fixup!: Remove outdated comments * fixup!: use info severity for normal shutdown log * fixup!: cleanup credo changes * refactor: isolate Engine from Expert * refactor: rename project node modules and simplify EngineApi/EngineNode code * refactor: use Burrito for packaging * chore: update github release workflow * feat: add plain(non burrito) releases * chore: Remove release-please-action * chore: Remove build/release tasks * chore: fix unordered aliases * chore: update lockfile * fix: rollback change to elixir version * chore: remove ci integration tests Using burrito we're no longer trying to activate the user's elixir executable on boot, making those tests stale * Revert changes to the release workflow It will be done in a follow-up PR * chore: add ci test for release builds * wip --------- Co-authored-by: doorgan <dorgandash@gmail.com>
1 parent 3043a23 commit 78026df

File tree

7 files changed

+160
-119
lines changed

7 files changed

+160
-119
lines changed

apps/expert/mix.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ defmodule Expert.MixProject do
1212
dialyzer: Mix.Dialyzer.config(add_apps: [:jason]),
1313
aliases: aliases(),
1414
elixirc_paths: elixirc_paths(Mix.env()),
15-
releases: releases()
15+
releases: releases(),
16+
default_release: :expert
1617
]
1718
end
1819

apps/expert/mix.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"elixir_sense": {:git, "https://github.com/elixir-lsp/elixir_sense.git", "73ce7e0d239342fb9527d7ba567203e77dbb9b25", [ref: "73ce7e0d239342fb9527d7ba567203e77dbb9b25"]},
99
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
1010
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
11-
"finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"},
11+
"finch": {:hex, :finch, "0.20.0", "5330aefb6b010f424dcbbc4615d914e9e3deae40095e73ab0c1bb0968933cadf", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2658131a74d051aabfcba936093c903b8e89da9a1b63e430bee62045fa9b2ee2"},
1212
"gen_lsp": {:hex, :gen_lsp, "0.11.0", "9eda4d2fcaff94d9b3062e322fcf524c176db1502f584a3cff6135088b46084b", [:mix], [{:jason, "~> 1.3", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.5 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:schematic, "~> 0.2.1", [hex: :schematic, repo: "hexpm", optional: false]}, {:typed_struct, "~> 0.3.0", [hex: :typed_struct, repo: "hexpm", optional: false]}], "hexpm", "d67c20650a5290a02f7bac53083ac4487d3c6b461f35a8b14c5d2d7638c20d26"},
1313
"hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"},
1414
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
@@ -23,7 +23,7 @@
2323
"path_glob": {:hex, :path_glob, "0.2.0", "b9e34b5045cac5ecb76ef1aa55281a52bf603bf7009002085de40958064ca312", [:mix], [{:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "be2594cb4553169a1a189f95193d910115f64f15f0d689454bb4e8cfae2e7ebc"},
2424
"recon": {:hex, :recon, "2.5.6", "9052588e83bfedfd9b72e1034532aee2a5369d9d9343b61aeb7fbce761010741", [:mix, :rebar3], [], "hexpm", "96c6799792d735cc0f0fd0f86267e9d351e63339cbe03df9d162010cefc26bb0"},
2525
"refactorex": {:hex, :refactorex, "0.1.52", "22a69062c84e0f20a752d3d6580269c09c242645ee4f722f03d4270dd8cbf218", [:mix], [{:sourceror, "~> 1.7", [hex: :sourceror, repo: "hexpm", optional: false]}], "hexpm", "4927fe6c3acd1f4695d6d3e443380167d61d004d507b1279c6084433900c94d0"},
26-
"req": {:hex, :req, "0.5.10", "a3a063eab8b7510785a467f03d30a8d95f66f5c3d9495be3474b61459c54376c", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "8a604815743f8a2d3b5de0659fa3137fa4b1cffd636ecb69b30b2b9b2c2559be"},
26+
"req": {:hex, :req, "0.5.14", "521b449fa0bf275e6d034c05f29bec21789a0d6cd6f7a1c326c7bee642bf6e07", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "b7b15692071d556c73432c7797aa7e96b51d1a2db76f746b976edef95c930021"},
2727
"schematic": {:hex, :schematic, "0.2.1", "0b091df94146fd15a0a343d1bd179a6c5a58562527746dadd09477311698dbb1", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0b255d65921e38006138201cd4263fd8bb807d9dfc511074615cd264a571b3b1"},
2828
"snowflake": {:hex, :snowflake, "1.0.4", "8433b4e04fbed19272c55e1b7de0f7a1ee1230b3ae31a813b616fd6ef279e87a", [:mix], [], "hexpm", "badb07ebb089a5cff737738297513db3962760b10fe2b158ae3bebf0b4d5be13"},
2929
"sourceror": {:hex, :sourceror, "1.10.0", "38397dedbbc286966ec48c7af13e228b171332be1ad731974438c77791945ce9", [:mix], [], "hexpm", "29dbdfc92e04569c9d8e6efdc422fc1d815f4bd0055dc7c51b8800fb75c4b3f1"},

flake.lock

Lines changed: 35 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22
description = "Reimagined language server for Elixir";
33

44
inputs.nixpkgs.url = "flake:nixpkgs";
5+
inputs.zigpkgs.url = "github:nixos/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3";
6+
inputs.xzpkgs.url = "github:nixos/nixpkgs/18dd725c29603f582cf1900e0d25f9f1063dbf11";
57
inputs.flake-parts.url = "github:hercules-ci/flake-parts";
68
inputs.systems.url = "github:nix-systems/default";
79

810
outputs = {
911
self,
1012
systems,
13+
zigpkgs,
14+
xzpkgs,
1115
...
1216
} @ inputs:
1317
inputs.flake-parts.lib.mkFlake {inherit inputs;} {
@@ -19,8 +23,14 @@
1923

2024
systems = import systems;
2125

22-
perSystem = {pkgs, ...}: let
26+
perSystem = {
27+
pkgs,
28+
system,
29+
...
30+
}: let
2331
erlang = pkgs.beam.packages.erlang_25;
32+
zpkgs = zigpkgs.legacyPackages.${system};
33+
xzpkgs' = xzpkgs.legacyPackages.${system};
2434
expert = self.lib.mkExpert {inherit erlang;};
2535
in {
2636
formatter = pkgs.alejandra;
@@ -51,17 +61,14 @@
5161
};
5262

5363
devShells.default = pkgs.mkShell {
54-
packages = let
55-
beamPackages = pkgs.beam.packages;
56-
in
57-
[
58-
beamPackages.erlang_27.erlang
59-
beamPackages.erlang_27.elixir_1_17
60-
]
61-
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
62-
pkgs.darwin.apple_sdk.frameworks.CoreFoundation
63-
pkgs.darwin.apple_sdk.frameworks.CoreServices
64-
];
64+
packages = with pkgs; [
65+
beam.packages.erlang_27.erlang
66+
beam.packages.erlang_27.elixir_1_17
67+
zpkgs.zig_0_14
68+
xzpkgs'.xz
69+
just
70+
_7zz
71+
];
6572
};
6673
};
6774
};

justfile

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
os := if os() == "macos" { "darwin" } else { os() }
2+
arch := if arch() =~ "(arm|aarch64)" { "arm64" } else { if arch() =~ "(x86|x86_64)" { "amd64" } else { "unsupported" } }
3+
local_target := if os =~ "(darwin|linux|windows)" { os + "_" + arch } else { "unsupported" }
4+
apps := "expert engine forge expert_credo"
5+
6+
[doc('Run mix deps.get for the given project')]
7+
deps project:
8+
#!/usr/bin/env bash
9+
cd apps/{{ project }}
10+
mix deps.get
11+
12+
[doc('Run an arbitrary command inside the given project directory')]
13+
run project +ARGS:
14+
#!/usr/bin/env bash
15+
set -euo pipefail
16+
cd apps/{{ project }}
17+
eval "{{ ARGS }}"
18+
19+
[doc('Compile the given project.')]
20+
compile project: (deps project)
21+
cd apps/{{ project }} && mix compile
22+
23+
[doc('Run tests in the given project')]
24+
test project="all" *args="":
25+
#!/usr/bin/env bash
26+
set -euo pipefail
27+
28+
case {{ project }} in
29+
all)
30+
for proj in {{ apps }}; do
31+
(cd "apps/$proj" && mix test {{args}})
32+
done
33+
;;
34+
*)
35+
(cd "apps/{{ project }}" && mix test {{args}})
36+
;;
37+
esac
38+
39+
[doc('Run a mix command in one or all projects. Use `just test` to run tests.')]
40+
mix cmd *project:
41+
#!/usr/bin/env bash
42+
43+
if [ -n "{{ project }}" ]; then
44+
cd apps/{{ project }}
45+
mix {{ cmd }}
46+
else
47+
for project in {{ apps }}; do
48+
(
49+
cd apps/"$project"
50+
51+
mix {{ cmd }}
52+
)
53+
done
54+
fi
55+
56+
[doc('Lint all projects or just a single project')]
57+
lint *project:
58+
#!/usr/bin/env bash
59+
set -euxo pipefail
60+
61+
just mix "format --check-formatted" {{ project }}
62+
just mix credo {{ project }}
63+
just mix dialyzer {{ project }}
64+
65+
build-engine:
66+
#!/usr/bin/env bash
67+
68+
cd apps/engine
69+
mix build
70+
71+
72+
[doc('Build a release for the local system')]
73+
[unix]
74+
release-local: (deps "expert") (compile "engine") build-engine
75+
#!/usr/bin/env bash
76+
cd apps/expert
77+
78+
if [ "{{ local_target }}" == "unsupported" ]; then
79+
echo "unsupported OS/Arch combination: {{ local_target }}"
80+
exit 1
81+
fi
82+
MIX_ENV=prod EXPERT_RELEASE_MODE=burrito BURRITO_TARGET="{{ local_target }}" mix release --overwrite
83+
84+
[windows]
85+
release-local: (deps "expert") (compile "engine") build-engine
86+
# idk actually how to set env vars like this on windows, might crash
87+
EXPERT_RELEASE_MODE=burrito BURRITO_TARGET="windows_amd64" MIX_ENV=prod mix release --no-compile
88+
89+
[doc('Build releases for all target platforms')]
90+
release-all: (compile "engine")
91+
#!/usr/bin/env bash
92+
cd apps/expert
93+
EXPERT_RELEASE_MODE=burrito MIX_ENV=prod mix release --no-compile
94+
95+
[doc('Build a plain release without burrito')]
96+
release-plain: (compile "engine")
97+
#!/usr/bin/env bash
98+
cd apps/expert
99+
MIX_ENV=prod mix release plain --overwrite
100+
101+
default: release-local
102+

mix.exs

Lines changed: 0 additions & 58 deletions
This file was deleted.

0 commit comments

Comments
 (0)