diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index d87e3212..df29128e 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -12,7 +12,7 @@ concurrency:
jobs:
generateMatrix:
name: "Generate matrix from cabal"
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -21,7 +21,7 @@ jobs:
uses: kleidukos/get-tested@v0.1.7.1
with:
cabal-file: flora.cabal
- ubuntu-version: "latest"
+ ubuntu-version: "22.04"
version: 0.1.7.1
Backend_tests:
diff --git a/.github/workflows/changelog.yaml b/.github/workflows/changelog.yaml
index c95388f9..d6cfb10b 100644
--- a/.github/workflows/changelog.yaml
+++ b/.github/workflows/changelog.yaml
@@ -5,7 +5,7 @@ on:
- synchronize
jobs:
lint-changelog:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: "actions/checkout@v4"
diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml
index f7dab565..55ce1524 100644
--- a/.github/workflows/docker-image.yml
+++ b/.github/workflows/docker-image.yml
@@ -1,16 +1,16 @@
name: Publish Docker Image
-on:
+on:
push:
branches: ["development"]
paths:
- - Dockerfile
+ - Dockerfile
- docker-compose.yml
- scripts/.zshrc
jobs:
publish-hello-docker-image:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Login to GitHub Container Registry
diff --git a/.github/workflows/duplicate-indexes.yaml b/.github/workflows/duplicate-indexes.yaml
index a4148b11..ac7973dc 100644
--- a/.github/workflows/duplicate-indexes.yaml
+++ b/.github/workflows/duplicate-indexes.yaml
@@ -12,7 +12,7 @@ concurrency:
jobs:
generateMatrix:
name: "Generate matrix from cabal"
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -21,7 +21,7 @@ jobs:
uses: kleidukos/get-tested@v0.1.7.1
with:
cabal-file: flora.cabal
- ubuntu-version: "latest"
+ ubuntu-version: "22.04"
version: 0.1.7.1
duplicate-index-check:
diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml
index f6028947..f8a706c0 100644
--- a/.github/workflows/frontend.yml
+++ b/.github/workflows/frontend.yml
@@ -7,7 +7,7 @@ on:
jobs:
Frontend_tests:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index ccc9eecb..8c730a0e 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -7,7 +7,7 @@ on:
jobs:
fourmolu:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
@@ -20,7 +20,7 @@ jobs:
app/**/*.hs
hlint:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/missing-fk-indexes.yml b/.github/workflows/missing-fk-indexes.yml
index ab347e53..f185da40 100644
--- a/.github/workflows/missing-fk-indexes.yml
+++ b/.github/workflows/missing-fk-indexes.yml
@@ -12,7 +12,7 @@ concurrency:
jobs:
generateMatrix:
name: "Generate matrix from cabal"
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -21,7 +21,7 @@ jobs:
uses: kleidukos/get-tested@v0.1.7.1
with:
cabal-file: flora.cabal
- ubuntu-version: "latest"
+ ubuntu-version: "22.04"
version: 0.1.7.1
missing-fk-index-check:
diff --git a/.github/workflows/setup.sh b/.github/workflows/setup.sh
index a67201bb..bd4d676e 100755
--- a/.github/workflows/setup.sh
+++ b/.github/workflows/setup.sh
@@ -3,7 +3,7 @@
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt -y update
-sudo apt -y install postgresql-14 g++ mcpp libffi7 llvm zlib1g-dev
+sudo apt -y install postgresql-16 g++ mcpp libffi7 llvm zlib1g-dev
wget https://github.com/souffle-lang/souffle/releases/download/2.2/x86_64-ubuntu-2004-souffle-2.2-Linux.deb
sudo dpkg -i ./x86_64-ubuntu-2004-souffle-2.2-Linux.deb
diff --git a/.github/workflows/test-docker-image.yml b/.github/workflows/test-docker-image.yml
index c74464d9..06ba5aa3 100644
--- a/.github/workflows/test-docker-image.yml
+++ b/.github/workflows/test-docker-image.yml
@@ -1,16 +1,16 @@
name: Build Docker Image
-on:
+on:
pull_request:
branches: ["main", "development"]
paths:
- - Dockerfile
+ - Dockerfile
- docker-compose.yml
- scripts/.zshrc
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Build the Docker image
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 45a40c23..9f46db68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# CHANGELOG
+## 1.0.24 -- 2025-01-12
+
+- Do not wrongly include "Nothing" as a query param to dependents listing pages' URL [#817](https://github.com/flora-pm/flora-server/pull/817)
+- Include prismJS to highlight code in the READMEs [#819](https://github.com/flora-pm/flora-server/pull/819)
+
## 1.0.23 -- 2025-01-02
- Record more route duration metrics with prometheus [#810](https://github.com/flora-pm/flora-server/pull/810)
diff --git a/Makefile b/Makefile
index fd257a15..2537efbd 100644
--- a/Makefile
+++ b/Makefile
@@ -120,7 +120,7 @@ style-hs: ## Run the haskell code formatters (fourmolu, cabal-fmt)
@find app test src -name '*.hs' | xargs -P $(PROCS) -I {} fourmolu -q -i {}
style-css: ## Run the CSS code formatter (stylelint)
- @cd assets ; yarn stylelint --fix css
+ @cd assets ; yarn stylelint --fix css --ignore-path .stylelintignore
style: style-hs style-css ## Run all the code formatters
diff --git a/assets/.stylelintignore b/assets/.stylelintignore
new file mode 100644
index 00000000..ba7672d5
--- /dev/null
+++ b/assets/.stylelintignore
@@ -0,0 +1 @@
+css/prism.css
diff --git a/assets/css/prism.css b/assets/css/prism.css
new file mode 100644
index 00000000..c5e8b315
--- /dev/null
+++ b/assets/css/prism.css
@@ -0,0 +1,144 @@
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */
+
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ tab-size: 4;
+ tab-size: 4;
+ tab-size: 4;
+ hyphens: none;
+ hyphens: none;
+ hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.token.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+
+ /* This background color was intended by the author of this theme. */
+ background: hsl(0 0% 100% / 50%);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
+
diff --git a/assets/css/styles.css b/assets/css/styles.css
index 1a455405..9bf86c0e 100644
--- a/assets/css/styles.css
+++ b/assets/css/styles.css
@@ -37,6 +37,7 @@
@import "4-helpers/3-spacing.css";
@import "4-helpers/4-typography.css";
@import "4-helpers/5-state.css";
+@import "prism.css";
/* Used for the sessions page */
.login-form {
diff --git a/assets/esbuild.config.js b/assets/esbuild.config.js
index 360b93ee..579e0a66 100644
--- a/assets/esbuild.config.js
+++ b/assets/esbuild.config.js
@@ -32,7 +32,8 @@ const mkProdPlugins = () => {
console.log(assets);
const orderAssets = {
"app.js": assets.app.js,
- "styles.css": assets[''].css[0]
+ "styles.css": assets[''].css[0],
+ "prism.js": assets.prism.js,
}
return JSON.stringify(orderAssets, null, " ");
}
@@ -70,6 +71,7 @@ const config = {
entryPoints: {
"app": "./js/app.js",
"styles": "./css/styles.css",
+ "prism": "./js/prism.js",
},
outdir: "../static",
bundle: true,
diff --git a/assets/js/prism.js b/assets/js/prism.js
new file mode 100644
index 00000000..ba63c2cf
--- /dev/null
+++ b/assets/js/prism.js
@@ -0,0 +1,21514 @@
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */
+///
+
+var _self = (typeof window !== 'undefined')
+ ? window // if in browser
+ : (
+ (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)
+ ? self // if in worker
+ : {} // if in node js
+ );
+
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT
+ * @author Lea Verou
+ * @namespace
+ * @public
+ */
+var Prism = (function (_self) {
+
+ // Private helper vars
+ var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
+ var uniqueId = 0;
+
+ // The grammar object for plaintext
+ var plainTextGrammar = {};
+
+
+ var _ = {
+ /**
+ * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the
+ * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load
+ * additional languages or plugins yourself.
+ *
+ * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.
+ *
+ * You obviously have to change this value before the automatic highlighting started. To do this, you can add an
+ * empty Prism object into the global scope before loading the Prism script like this:
+ *
+ * ```js
+ * window.Prism = window.Prism || {};
+ * Prism.manual = true;
+ * // add a new