Skip to content

Commit

Permalink
Merge pull request #19 from BrechtSerckx/react
Browse files Browse the repository at this point in the history
Replace handrolled html+js by React
  • Loading branch information
BrechtSerckx authored Jan 25, 2024
2 parents 60ad18f + 8280c23 commit a08f56b
Show file tree
Hide file tree
Showing 41 changed files with 29,494 additions and 635 deletions.
3 changes: 3 additions & 0 deletions .actrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-P ubuntu-18.04=catthehacker/ubuntu:act-18.04
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
-P ubuntu-latest=catthehacker/ubuntu:act-latest
7 changes: 7 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Envvars
RECYCLE_ICS_WWW_DIR=recycle-ics-ui/build
RECYCLE_ICS_PORT=3332
REACT_APP_RECYCLE_ICS_SERVER_URL=http://localhost:$RECYCLE_ICS_PORT

# Override these in local/env
RECYCLE_ICS_SECRET="get-this-by-inspecting-requests-to-recycle-app.be"
10 changes: 9 additions & 1 deletion .envrc
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
use_nix shell.nix
# load Nix shell
use_nix shell.nix

# load envvars
dotenv .env

# load local direnv config and envvars
source_env_if_exists local/envrc
dotenv_if_exists local/env
13 changes: 13 additions & 0 deletions .github/workflows/haskell-ci.env.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml
index d92f1bf..6363f70 100644
--- a/.github/workflows/haskell-ci.yml
+++ b/.github/workflows/haskell-ci.yml
@@ -20,6 +20,8 @@ on:
pull_request:
branches:
- master
+env:
+ RECYCLE_ICS_WWW_DIR: dummy-dir
jobs:
linux:
name: Haskell-CI - Linux - ${{ matrix.compiler }}
12 changes: 10 additions & 2 deletions .github/workflows/haskell-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,14 @@
#
name: Haskell-CI
on:
- push
- pull_request
push:
branches:
- master
pull_request:
branches:
- master
env:
RECYCLE_ICS_WWW_DIR: dummy-dir
jobs:
linux:
name: Haskell-CI - Linux - ${{ matrix.compiler }}
Expand Down Expand Up @@ -44,6 +50,8 @@ jobs:
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
apt-get update
apt-get install -y nodejs
env:
HCKIND: ${{ matrix.compilerKind }}
HCNAME: ${{ matrix.compiler }}
Expand Down
52 changes: 52 additions & 0 deletions .github/workflows/nix.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Nix-CI
on:
push:
branches:
- master
pull_request:
branches:
- master

env:
cache-name: brechtserckx-recycle

jobs:

Nix-CI:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install Nix
uses: cachix/install-nix-action@v20
with:
# used to provide bash in nix-shell
nix_path: nixpkgs=channel:nixos-unstable

- name: Test Nix install
run: nix-build --version

- uses: cachix/cachix-action@v12
with:
name: '${{ env.cache-name }}'
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
extraPullNames: 'iohk'

- uses: falti/dotenv-action@v1.0.4
with:
export-variables: true
log-variables: true
keys-case: bypass

- run: nix-shell --run 'echo "shell ok"'

# FIXME: Build using system npm first
# This can be deleted once the Nix build for the ui works again
- run: nix-shell --run 'cd recycle-ics-ui && npm install && npm run build'

- run: nix-shell --run 'cabal build all'

# FIXME: While the NPM build is not working, I'll need to manually create
# The recycle-ics-ui build first
- run: nix-build -A recycle-client -A recycle-ics
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
/dist/
/.direnv
/cabal.project.local
/local/
/.secrets
5 changes: 4 additions & 1 deletion cabal.haskell-ci
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ postgresql: False
google-chrome: False

-- Environment variables per job (e.g. `8.0.2:HADDOCK=false`)
-- 2023-05-11: does not work with GitHub Actions
-- env: 9.0.2:RECYCLE_ICS_WWW_DIR=dummy-dir
env:

-- Allow failures of particular GHC version
Expand All @@ -121,11 +123,12 @@ ghcup-jobs: >8.10.4 && <9 || >9.0.1
ghcup-version: 0.1.17.5

-- Additional apt packages to install
apt:
apt: nodejs

travis-patches:

github-patches:
.github/workflows/haskell-ci.env.patch

-- Don't insert the haskell-ci version into the generated Travis YAML file
insert-version: True
Expand Down
46 changes: 34 additions & 12 deletions default.nix
Original file line number Diff line number Diff line change
@@ -1,15 +1,37 @@
{ release ? false }:
{ release ? false, build ? true }:
let
nixpkgs = import ./nix/pkgs.nix;
in nixpkgs.haskell-nix.project {
src = nixpkgs.haskell-nix.haskellLib.cleanGit {
name = "recycle";
src = ./.;
sources = import ./nix/sources.nix { };
nixpkgs = import haskellNix.sources.nixpkgs-unstable haskellNix.nixpkgsArgs;
nixpkgs-node = import sources.nixpkgs-node {};

# haskell projects
haskellNix = import sources.haskellNix { };
hsPkgs = nixpkgs.haskell-nix.project {
src = nixpkgs.haskell-nix.haskellLib.cleanGit {
name = "recycle";
src = ./.;
};
modules = [{
reinstallableLibGhc = true;
}] ++ (if build then [{
# only when building, not in shell
# fails when the recycle-ics-ui build directory doesn't exist yet
packages.recycle-ics.components.exes.recycle-ics.preBuild = ''
# link `recycle-ics-ui` to the static directory so it can be served from `recycle-ics` server
export RECYCLE_ICS_WWW_DIR=${recycle-ics-ui}
'';
}] else []) ++ (if release then [{
packages.recycle-client.components.exes.recycle-client.dontStrip = false;
packages.recycle-ics.components.exes.recycle-ics.dontStrip = false;
}] else
[ ]);
compiler-nix-name = "ghc902";
};
modules = [{ reinstallableLibGhc = true; }] ++ (if release then [{
packages.recycle-client.components.exes.recycle-client.dontStrip = false;
packages.recycle-ics.components.exes.recycle-ics.dontStrip = false;
}] else
[ ]);
compiler-nix-name = "ghc902";

recycle-ics-ui = nixpkgs-node.callPackage ./recycle-ics-ui { };
in {
inherit sources nixpkgs hsPkgs recycle-ics-ui;

inherit (hsPkgs.recycle-client.components.exes) recycle-client;
inherit (hsPkgs.recycle-ics.components.exes) recycle-ics;
}
3 changes: 1 addition & 2 deletions docker.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ let
in { name ? "recycle", tag ? "latest" }:

let
recycle-ics =
(import ./. { release = true; }).recycle-ics.components.exes.recycle-ics;
inherit (import ./. { release = true; }) recycle-ics;
in nixpkgs.dockerTools.buildImage {
inherit name tag;
fromImageName = "alpine:latest";
Expand Down
12 changes: 12 additions & 0 deletions nix/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,17 @@
"type": "tarball",
"url": "https://github.com/nmattia/niv/archive/af958e8057f345ee1aca714c1247ef3ba1c15f5e.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"nixpkgs-act": {
"branch": "master",
"repo": "https://github.com/NixOS/nixpkgs.git",
"rev": "c5445c0fda2adaea8113b01d2fabeb2d50f40aa5",
"type": "git"
},
"nixpkgs-node": {
"branch": "master",
"repo": "https://github.com/NixOS/nixpkgs.git",
"rev": "33898b9ad7be4463073d15d1dc27a99e936b79b6",
"type": "git"
}
}
23 changes: 23 additions & 0 deletions recycle-ics-ui/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
46 changes: 46 additions & 0 deletions recycle-ics-ui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Getting Started with Create React App

This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

## Available Scripts

In the project directory, you can run:

### `npm start`

Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.

The page will reload if you make edits.\
You will also see any lint errors in the console.

### `npm test`

Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.

### `npm run build`

Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!

See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.

### `npm run eject`

**Note: this is a one-way operation. Once you `eject`, you can’t go back!**

If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.

You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.

## Learn More

You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).

To learn React, check out the [React documentation](https://reactjs.org/).
8 changes: 8 additions & 0 deletions recycle-ics-ui/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{ lib, buildNpmPackage, fetchFromGitHub, stdenv }:

buildNpmPackage rec {
pname = "recycle-ics-ui";
version = "0.1.0";
src = ./.;
npmDepsHash = "sha256-18GoVdpMZrYvOdtTrPhSLhPEOpfMOBl40Wj8ddbIwts=";
}
Loading

0 comments on commit a08f56b

Please sign in to comment.