diff --git a/Makefile b/Makefile index a105940f6..cd008f20f 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ export STACK_CORES = $(shell echo $(($(CPU_CORES)/2))) export BASE_PORTS export UNIWORXDB_OPTS ?= -cf export PROD ?= false +export SRC ifneq ($(PROD),true) export --DEVELOPMENT=--flag uniworx:dev @@ -245,6 +246,7 @@ endif --env CONTAINER_FILE=$(CONTAINER_FILE) \ --env CONTAINER_NAME=$${CONTAINER_NAME} \ --env JOB=$(JOB) \ + --env SRC=$(SRC) \ --name $${CONTAINER_NAME} \ $${CONTAINER_CMD} \ ` ; \ @@ -253,11 +255,13 @@ endif $(CONTAINER_COMMAND) attach $${CONTAINER_ID} || : ; \ fi +# For Reverse Proxy Problem see: https://groups.google.com/g/yesodweb/c/2EO53kSOuy0/m/Lw6tq2VYat4J + # HELP(start-backend): start development instance --start-backend: export DEV_PORT_HTTP=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTP=' | sed 's/DEV_PORT_HTTP=//'`; \ export DEV_PORT_HTTPS=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTPS=' | sed 's/DEV_PORT_HTTPS=//'`; \ - export HOST=`hostname -s` ; \ + export HOST=127.0.0.1 ; \ export PORT=$${PORT:-$${DEV_PORT_HTTP}} ; \ export DETAILED_LOGGING=$${DETAILED_LOGGING:-true} ; \ export LOG_ALL=$${LOG_ALL:-false} ; \ @@ -271,7 +275,7 @@ endif export RIBBON=$${RIBBON:-$${HOST:-localhost}} ; \ export APPROOT=$${APPROOT:-http://localhost:$${DEV_PORT_HTTP}} ; \ export AVSPASS=$${AVSPASS:-nopasswordset} ; \ - stack $(STACK_CORES) exec --local-bin-path $$(pwd)/bin --copy-bins -- yesod devel -p "$${DEV_PORT_HTTP}" -q "$${DEV_PORT_HTTPS}" + stack $(STACK_CORES) exec --local-bin-path $$(pwd)/bin --copy-bins -- yesod devel -n -p "$${DEV_PORT_HTTP}" -q "$${DEV_PORT_HTTPS}" # HELP(compile-backend): compile backend binaries --compile-backend: stack build $(STACK_CORES) --fast --profile --library-profiling --executable-profiling --flag uniworx:-library-only $(--DEVELOPMENT) --local-bin-path $$(pwd)/bin --copy-bins @@ -293,7 +297,7 @@ uniworx.cabal: --start-frontend: --compile-frontend; --dependencies-frontend: node_modules assets static well-known; node_modules: package.json package-lock.json - npm ci --cache .npm --prefer-offline + npm install --cache .npm --prefer-offline package-lock.json: package.json npm install --cache .npm --prefer-offline assets: assets/favicons assets/icons; @@ -315,7 +319,7 @@ well-known: static; ./bin/uniworxdb $(UNIWORXDB_OPTS) --shell-ghci: - stack exec -- ghci + stack ghci -- $(SRC) # --main-is uniworx:exe:uniworx # HELP(shell-{backend,frontend,memcached,minio,postgres}): enter (bash) shell inside a new container of a given service diff --git a/azure-pipelines.yaml b/azure-pipelines.yaml index 7da1e371e..581e555da 100644 --- a/azure-pipelines.yaml +++ b/azure-pipelines.yaml @@ -16,18 +16,31 @@ jobs: # echo Add other tasks to build, test, and deploy your project. # echo See https://aka.ms/yaml # displayName: 'Run a multi-line script' -# - job: DockerTaskTest -# container: -# image: 'devfra.azurecr.io/de.fraport.trusted/ubuntu:22.04' -# endpoint: devfra -# steps: -# - task: Docker@2 -# displayName: Image build test -# inputs: -# command: buildAndPush -# Dockerfile: docker/backend/Dockerfile -# buildContext: . -# tags: backend +- job: DockerTaskTest + container: + image: devfra.azurecr.io/de.fraport.build/tools:1.1.0 + endpoint: devfra + steps: + - task: Docker@2 + name: dockerLoginDevFra + displayName: Docker Login to devfra + inputs: + command: login + containerRegistry: devFra + - task: Docker@2 + name: dockerBuild + displayName: Backend image build test + inputs: + command: build + Dockerfile: docker/backend/Dockerfile + buildContext: . + tags: | + $(Build.BuildNumber) + backend + arguments: | + --build-arg HTTPS_PROXY=http://proxy.frankfurt-airport.de:8080 + --build-arg HTTP_PROXY=http://proxy.frankfurt-airport.de:8080 + --build-arg NO_PROXY='localhost,127.0.0.1,*.docker.internal,*.azmk8s.io,devfra.azurecr.io,devfra.westeurope.data.azurecr.io' # - job: BuildKitTest # container: # image: 'devfra.azurecr.io/de.fraport.trusted/buildkit:0.12.1' @@ -38,15 +51,15 @@ jobs: # --local context=. \ # --local dockerfile=docker/backend/Dockerfile # displayName: BuildKit test -- job: CustomBuildahTest - container: - image: 'devfra.azurecr.io/de.fraport.trusted/ubuntu:22.04' - endpoint: devfra - steps: - - script: | - id - docker build --help - sudo apt-get -y update - sudo apt-get -y install buildah - buildah bud -t fradrive-backend-test --volume .:/mnt/fradrive --file docker/backend/Dockerfile - displayName: Build buildah image \ No newline at end of file +# - job: CustomBuildahTest +# container: +# image: 'devfra.azurecr.io/de.fraport.trusted/ubuntu:22.04' +# endpoint: devfra +# steps: +# - script: | +# id +# docker build --help +# sudo apt-get -y update +# sudo apt-get -y install buildah +# buildah bud -t fradrive-backend-test --volume .:/mnt/fradrive --file docker/backend/Dockerfile +# displayName: Build buildah image \ No newline at end of file diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 54a0c5d55..e2629549c 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -1,6 +1,12 @@ -FROM debian:12.5 +FROM docker.io/ubuntu:latest -RUN apt-get update && apt-get -y install inotify-tools +# debug info +# RUN lsb_release -a +# RUN curl -k https://google.de +RUN env +# RUN curl -sSLk -x $HTTP_PROXY + +RUN apt-get -y update && apt-get -y install inotify-tools RUN apt-get -y update && apt-get -y install haskell-stack git RUN apt-get -y update && apt-get -y install alex g++ happy libghc-zlib-dev libpq-dev libsodium-dev locales locales-all pkg-config RUN apt-get -y update && apt-get -y install llvm @@ -26,7 +32,7 @@ RUN stack install yesod-bin RUN stack install hpack ENV FRADRIVE_MAKE_TARGET=--start-backend -ENTRYPOINT make -- ${FRADRIVE_MAKE_TARGET} STACK_ROOT="${STACK_ROOT}" IN_CONTAINER=true CONTAINER_FILE="${CONTAINER_FILE}" JOB="${JOB}" +ENTRYPOINT make -- ${FRADRIVE_MAKE_TARGET} STACK_ROOT="${STACK_ROOT}" IN_CONTAINER=true CONTAINER_FILE="${CONTAINER_FILE}" JOB="${JOB}" SRC="${SRC}" EXPOSE 3000/tcp EXPOSE 3443/tcp diff --git a/src/Utils/Icon.hs b/src/Utils/Icon.hs index b09ca6912..4cffa0640 100644 --- a/src/Utils/Icon.hs +++ b/src/Utils/Icon.hs @@ -37,7 +37,11 @@ type WidgetSiteless = forall site. WidgetFor site () --------------------------------------------------------------------------- --- IMPORTANT: Alert-Icons must be registered in alert-icons.js as well!!! +-- IMPORTANT: +-- All icons must be manually registered within the following files: +-- - src/Utils/Icon.hs +-- - assets/icon-src/fontawesome.json +-- - frontend/src/icons.scss --------------------------------------------------------------------------- data Icon = IconNew @@ -136,8 +140,7 @@ data Icon | IconUserBadge -- something about user-avs, e.g. badge in-/valid | IconGlasses -- user must wear glasses while driving deriving (Eq, Ord, Enum, Bounded, Show, Read, Generic) - deriving anyclass (Universe, Finite, NFData) - + deriving anyclass (Universe, Finite, NFData) iconText :: Icon -> Text iconText = camelToPathPiece' 1 . tshow @@ -201,32 +204,32 @@ iconShortcuts = foldMap mkIcon (universeF :: [Icon]) -- Some case are special, hence no Template Haskell here isVisible :: Bool -> Markup --- ^ Display an icon that denotes that something™ is visible or invisible +-- ^ Display an icon that denotes that somethingâ„¢ is visible or invisible isVisible True = icon IconVisible isVisible False = icon IconInvisible hasComment :: Bool -> Markup --- ^ Display an icon that denotes that something™ has a comment or not +-- ^ Display an icon that denotes that somethingâ„¢ has a comment or not hasComment True = icon IconCommentTrue hasComment False = icon IconCommentFalse hasTickmark :: Bool -> Markup --- ^ Maybe display an icon that denotes that something™ is okay +-- ^ Maybe display an icon that denotes that somethingâ„¢ is okay hasTickmark True = icon IconOK hasTickmark False = mempty isBad :: Bool -> Markup --- ^ Maybe display an icon that denotes that something™ is bad +-- ^ Maybe display an icon that denotes that somethingâ„¢ is bad isBad True = icon IconProblem isBad False = mempty --- ^ Maybe display an icon that denotes that something™ is new +-- ^ Maybe display an icon that denotes that somethingâ„¢ is new isNew :: Bool -> Markup isNew True = icon IconNew isNew False = mempty -- DEPRECATED by Handler.Utils.updateAutomatic, which includes a helpful tooltip --- Maybe display an icon that denotes that something™ is NOT automagically updated or derived, but had been edited +-- Maybe display an icon that denotes that somethingâ„¢ is NOT automagically updated or derived, but had been edited -- isAutomatic :: Bool -> Markup -- isAutomatic True = mempty -- icon IconMagic -- isAutomatic False = icon IconLocked -- IconEdit @@ -262,9 +265,9 @@ iconWriteReadOnly False = icon IconVisible -- we implement them here just once for the first icon: -- isVisibleWidget :: Bool -> WidgetSiteless --- ^ Widget having an icon that denotes that something™ is visible or invisible +-- ^ Widget having an icon that denotes that somethingâ„¢ is visible or invisible isVisibleWidget = toWidget . isVisible maybeIsVisibleWidget :: Maybe Bool -> WidgetSiteless --- ^ Maybe a widget with an icon that denotes that something™ is visible or invisible +-- ^ Maybe a widget with an icon that denotes that somethingâ„¢ is visible or invisible maybeIsVisibleWidget = toWidget . foldMap isVisible