diff --git a/README.md b/README.md index 8ca013b..ff58f43 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,17 @@ +Contents +1. [About](#about) +2. [Demo](#demo) +3. [How It Works](#how-it-works) +4. [Cloudflare](#regarding-cloudflare) +5. [Development](#development) + 1. [Compiling](#compiling) + 1. [Environment Variables](#environment-variables) + +## About + A redirecting service for FOSS alternative frontends. [Farside](https://farside.link) provides links that automatically redirect to @@ -178,11 +189,29 @@ goes against what Farside is trying to solve. Use at your own discretion. ## Development - Install [elixir](https://elixir-lang.org/install.html) - (on Debian systems) Install [erlang-dev](https://packages.debian.org/sid/erlang-dev) + +To run Farside without compiling, you can perform the following steps: + - Install dependencies: `mix deps.get` - Initialize db contents: `mix run -e Farside.Instances.sync` - Run Farside: `mix run --no-halt` - Uses localhost:4001 +### Compiling + +You can create a standalone Farside app using the steps below. In the example, the +Farside executable is copied to `/usr/local/bin`, but can be moved to any preferred +destination. Note that the executable still depends on the C runtime of the machine +it is built on, so if you want a more portable binary, you should build Farside on a +system with older library versions. + +``` +MIX_ENV=cli && mix deps.get && mix release +cp _build/cli/rel/bakeware/farside /usr/local/bin +sudo chmod +x /usr/local/bin/farside +farside +``` + ### Environment Variables diff --git a/mix.exs b/mix.exs index 13ddd3b..3bd45ef 100644 --- a/mix.exs +++ b/mix.exs @@ -1,16 +1,31 @@ defmodule Farside.MixProject do use Mix.Project + @source_url "https://github.com/benbusby/farside.git" + @version "0.1.1" + @app :farside + def project do [ - app: :farside, - version: "0.1.0", + app: @app, + version: @version, + name: "farside", elixir: "~> 1.8", - start_permanent: Mix.env() == :prod, - deps: deps() + source_url: @source_url, + start_permanent: Mix.env() == :prod || Mix.env() == :cli, + deps: deps(), + aliases: aliases(), + description: description(), + package: package(), + releases: [{@app, release()}], + preferred_cli_env: [release: :cli] ] end + defp aliases do + [] + end + # Run "mix help compile.app" to learn about applications. def application do [ @@ -27,7 +42,32 @@ defmodule Farside.MixProject do {:plug_attack, "~> 0.4.2"}, {:plug_cowboy, "~> 2.0"}, {:quantum, "~> 3.0"}, - {:cubdb, "~> 2.0.1"} + {:cubdb, "~> 2.0.1"}, + {:bakeware, "~> 0.2.4"} + ] + end + + defp description() do + "A redirecting service for FOSS alternative frontends." + end + + defp package() do + [ + name: "farside", + files: ["lib", "mix.exs", "README*"], + maintainers: ["Ben Busby"], + licenses: ["MIT"], + links: %{"GitHub" => "https://github.com/benbusby/farside"} + ] + end + + defp release() do + [ + overwrite: true, + cookie: "#{@app}_cookie", + quiet: true, + steps: [:assemble, &Bakeware.assemble/1], + strip_beams: Mix.env() == :cli ] end end diff --git a/mix.lock b/mix.lock index a8e70df..87a9cad 100644 --- a/mix.lock +++ b/mix.lock @@ -1,10 +1,12 @@ %{ + "bakeware": {:hex, :bakeware, "0.2.4", "0aaf49b34f4bab2aa433f9ff1485d9401e421603160abd6d269c469fc7b65212", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "7b97bcf6fbeee53bb32441d6c495bf478d26f9575633cfef6831e421e86ada6d"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "crontab": {:hex, :crontab, "1.1.11", "4028ced51b813a5061f85b689d4391ef0c27550c8ab09aaf139e4295c3d93ea4", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "ecb045f9ac14a3e2990e54368f70cdb6e2f2abafc5bc329d6c31f0c74b653787"}, "cubdb": {:hex, :cubdb, "2.0.1", "24cab8fb4128df704c52ed641f5ed70af352f7a3a80cebbb44c3bbadc3fd5f45", [:mix], [], "hexpm", "57cf25aebfc34f4580d9075da06882b4fe3e0739f5353d4dcc213e9cc1b10cdf"}, + "elixir_make": {:hex, :elixir_make, "0.7.6", "67716309dc5d43e16b5abbd00c01b8df6a0c2ab54a8f595468035a50189f9169", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5a0569756b0f7873a77687800c164cca6dfc03a09418e6fcf853d78991f49940"}, "gen_stage": {:hex, :gen_stage, "1.1.2", "b1656cd4ba431ed02c5656fe10cb5423820847113a07218da68eae5d6a260c23", [:mix], [], "hexpm", "9e39af23140f704e2b07a3e29d8f05fd21c2aaf4088ff43cb82be4b9e3148d02"}, "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},