-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3793977
commit 8fbd45c
Showing
5 changed files
with
79 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# Copyright (C) 2023 Monocle authors | ||
# SPDX-License-Identifier: AGPL-3.0-or-later | ||
# | ||
# doc: https://just.systems/man/en/chapter_1.html | ||
|
||
PINCLUDE := "-I /usr/include ${PROTOC_FLAGS} -I ./schemas/" | ||
# just doesn't support array so we create a space separated string for bash | ||
# see: https://github.com/casey/just/issues/1570 | ||
PBS := `ls schemas/monocle/protob/*.proto | grep -v http.proto | sed 's/schemas.//' | tr '\n' ' '` | ||
|
||
# Update code after changing protobuf schema (./schemas/monocle/protob), ci.dhall or architecture.plantuml | ||
codegen: codegen-ci codegen-doc codegen-stubs codegen-javascript codegen-openapi codegen-haskell | ||
|
||
# Generate CI config from .github/workflows/ci.dhall | ||
[private] | ||
codegen-ci: | ||
set -euxo pipefail | ||
echo "(./.github/workflows/ci.dhall).Nix" | dhall-to-yaml > .github/workflows/nix.yaml | ||
echo "(./.github/workflows/ci.dhall).NixBuild" | dhall-to-yaml > .github/workflows/nix-build.yaml | ||
echo "(./.github/workflows/ci.dhall).Web" | dhall-to-yaml > .github/workflows/web.yaml | ||
echo "(./.github/workflows/ci.dhall).Docker" | dhall-to-yaml > .github/workflows/docker.yaml | ||
echo "(./.github/workflows/ci.dhall).Publish-Master-Image" | dhall-to-yaml > .github/workflows/publish-master.yaml | ||
echo "(./.github/workflows/ci.dhall).Publish-Tag-Image" | dhall-to-yaml > .github/workflows/publish-tag.yaml | ||
|
||
# Generate doc/architecture.png from doc/architecture.plantuml | ||
# just doesn't support timestamp based rule, so we keep make for plantuml | ||
# see: https://github.com/casey/just/issues/867 | ||
[private] | ||
codegen-doc: | ||
set -euxo pipefail | ||
make doc/architecture.png | ||
|
||
# Generate HTTP clients and server | ||
[private] | ||
codegen-stubs: | ||
set -euxo pipefail | ||
mkdir -p srcgen/ | ||
cabal -fcodegen run monocle-codegen ./schemas/monocle/protob/http.proto ./src/Monocle/Client/Api.hs ./src/Monocle/Servant/HTTP.hs ./srcgen/WebApi.res | ||
fourmolu -i ./src/Monocle/Client/Api.hs ./src/Monocle/Servant/HTTP.hs | ||
./web/node_modules/.bin/bsc -format ./srcgen/WebApi.res > ./web/src/components/WebApi.res | ||
rm -Rf srcgen/ | ||
|
||
# Generate haskell data type from protobuf | ||
[private] | ||
codegen-haskell: | ||
set -euxo pipefail | ||
for pb in {{PBS}}; do \ | ||
compile-proto-file --includeDir /usr/include --includeDir schemas/ --includeDir ${PROTOBUF_SRC} --proto ${pb} --out codegen/; \ | ||
done | ||
find codegen/Monocle -type f -name "*.hs" -exec sed -i {} -e '1i{-# LANGUAGE NoGeneralisedNewtypeDeriving #-}' \; | ||
fourmolu -i codegen/Monocle | ||
|
||
# Generate javascript data type from protobuf | ||
[private] | ||
codegen-javascript: | ||
set -euxo pipefail | ||
rm -f web/src/messages/* | ||
for pb in {{PBS}}; do \ | ||
ocaml-protoc {{PINCLUDE}} -bs -ml_out web/src/messages/ schemas/${pb}; \ | ||
done | ||
python3 ./codegen/rename_bs_module.py ./web/src/messages/ | ||
|
||
# Generate openapi from protobuf | ||
[private] | ||
codegen-openapi: | ||
set -euxo pipefail | ||
protoc {{PINCLUDE}} --openapi_out=./doc/ monocle/protob/http.proto | ||
echo Created doc/openapi.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,5 @@ | ||
# Copyright (C) 2021 Monocle authors | ||
# SPDX-License-Identifier: AGPL-3.0-or-later | ||
.PHONY: up-stage | ||
|
||
|
||
BASEDIR = monocle/protob | ||
MESSAGES = $(BASEDIR)/search.proto $(BASEDIR)/config.proto $(BASEDIR)/login.proto $(BASEDIR)/metric.proto $(BASEDIR)/auth.proto | ||
CRAWLER = $(BASEDIR)/change.proto $(BASEDIR)/issue.proto $(BASEDIR)/crawler.proto | ||
PINCLUDE = -I /usr/include $(PROTOC_FLAGS) -I ./schemas/ | ||
|
||
codegen: codegen-ci codegen-javascript codegen-stubs codegen-openapi codegen-haskell doc/architecture.png | ||
|
||
codegen-ci: | ||
echo "(./.github/workflows/ci.dhall).Nix" | dhall-to-yaml > .github/workflows/nix.yaml | ||
echo "(./.github/workflows/ci.dhall).NixBuild" | dhall-to-yaml > .github/workflows/nix-build.yaml | ||
echo "(./.github/workflows/ci.dhall).Web" | dhall-to-yaml > .github/workflows/web.yaml | ||
echo "(./.github/workflows/ci.dhall).Docker" | dhall-to-yaml > .github/workflows/docker.yaml | ||
echo "(./.github/workflows/ci.dhall).Publish-Master-Image" | dhall-to-yaml > .github/workflows/publish-master.yaml | ||
echo "(./.github/workflows/ci.dhall).Publish-Tag-Image" | dhall-to-yaml > .github/workflows/publish-tag.yaml | ||
|
||
doc/architecture.png: doc/architecture.plantuml | ||
plantuml ./doc/architecture.plantuml | ||
|
||
codegen-stubs: | ||
mkdir -p srcgen/ | ||
(cabal -fcodegen run monocle-codegen ./schemas/$(BASEDIR)/http.proto ./src/Monocle/Client/Api.hs ./src/Monocle/Servant/HTTP.hs ./srcgen/WebApi.res) | ||
fourmolu -i ./src/Monocle/Client/Api.hs ./src/Monocle/Servant/HTTP.hs | ||
./web/node_modules/.bin/bsc -format ./srcgen/WebApi.res > ./web/src/components/WebApi.res | ||
rm -Rf srcgen/ | ||
|
||
codegen-haskell: | ||
sh -c 'for pb in $(MESSAGES) $(CRAWLER); do compile-proto-file --includeDir /usr/include --includeDir schemas/ --includeDir ${PROTOBUF_SRC} --proto $${pb} --out codegen/; done' | ||
find codegen/Monocle -type f -name "*.hs" -exec sed -i {} -e '1i{-# LANGUAGE NoGeneralisedNewtypeDeriving #-}' \; | ||
fourmolu -i codegen/Monocle | ||
|
||
codegen-javascript: | ||
rm -f web/src/messages/* | ||
sh -c 'for pb in $(MESSAGES) $(CRAWLER); do ocaml-protoc $(PINCLUDE) -bs -ml_out web/src/messages/ schemas/$${pb}; done' | ||
python3 ./codegen/rename_bs_module.py ./web/src/messages/ | ||
|
||
codegen-openapi: | ||
protoc $(PINCLUDE) --openapi_out=./doc/ $(BASEDIR)/http.proto | ||
@echo Created doc/openapi.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters