Commit Graph

120 Commits

Author SHA1 Message Date
Iain Sproat 5361d64e99 Revert "fix(server helm / dockerfile): remove entrypoint from dockerfile (#1605)" (#1606)
This reverts commit bcea709712.
2023-06-02 16:33:26 +01:00
Gergő Jedlicska bcea709712 fix(server helm / dockerfile): remove entrypoint from dockerfile (#1605)
the server helm deployment only overrides if inspect is needed
2023-06-02 16:01:01 +02:00
Iain Sproat e71f382e6a feat(helm): configure inspect flag for server via helm chart (#1593) 2023-06-01 21:43:22 +01:00
Kristaps Fabians Geikins 2eb5f51af3 feat: dui3 package (#1585) 2023-05-19 16:57:28 +03:00
Iain Sproat b1cbd05683 feat(circleci): adds a new step to ensure Helm Chart documentation is kept in line with Helm Chart (#1574)
* fix(helm): update documentation to match helm chart
* fix(helm): update documentation should not update README in helm repository
* fix(helm): should ensure output schema conforms to prettier requirements
* feat(pre-commit): update helm documentation as part of pre-commit
* feat(circleci): update Helm README when publishing new Helm chart
* fix(pre-commit): need to npm install before using readme generator
2023-05-12 13:26:28 +01:00
Iain Sproat 93179e163b fix(helm): selector labels for frontend cannot be changed automatically by helm (#1569) 2023-05-08 11:14:12 +02:00
Kristaps Fabians Geikins b02a07e2b6 feat: Frontend 2.0 MVP 2023-05-08 10:47:01 +03:00
Gergő Jedlicska 89dccd8495 feat(server): add speckle automate as a configurable default app (#1540)
* feat(server): add speckle automate as a configurable default app

* feat(server): add default automate url, and helm values

* fix default app tests reporting the old number
2023-04-19 12:59:59 +02:00
Andrew Gartrell 0b10fc3a07 Update values.yaml (#1536)
* updated tag to current tag
* dropped "v" prefix which hasn't been used since 2.3.3
2023-04-19 12:57:23 +02:00
Iain Sproat 1515e2fee6 revert(ratelimit): defaults should remain as was prior to 2a35fe6 (#1528)
* Revert "fix(ratelimit): reduce /graphql limit based on incident (#1505)"
This reverts commit 2a35fe6178.
* Revert helm chart defaults to value in code
- fix typo
2023-04-13 15:24:51 +01:00
Iain Sproat 59c0b7ada0 feat(helm): rate limits are configurable via helm chart (#1507)
* feat(helm): rate limits are configurable via helm chart
* Document server.monitoring.mp
* Update schema.json
2023-04-07 15:17:03 +01:00
Iain Sproat aee6de9ee0 fix(helm): network policy should allow egress to analytics.speckle.sy… (#1494)
* fix(helm): network policy should allow egress to analytics.speckle.systems
- previously only allowed DNS lookup

* matchName not matchPattern on analytics.speckle.systems
2023-03-30 14:52:02 +02:00
Iain Sproat ca0c0437f1 Fix network policies (#1491)
* fix(helm): fix logic in networkpolicies to check for existence of object
- object must exist before we can query its parameters
- if the 'mp' object is set and it is explicitly set to 'false' then the endpoint is blocked, otherwise it is allowed.

* fix(helm chart): accessing an unset object in the second part of an and statement breaks helm

* fix(helm): cilium network policy updated to put mp within monitoring object
2023-03-30 11:23:29 +01:00
Iain Sproat 03bc5a4ead fix(helm): fix logic in networkpolicies to check for existence of object (#1490)
- object must exist before we can query its parameters
- if the 'mp' object is set and it is explicitly set to 'false' then the endpoint is blocked, otherwise it is allowed.
2023-03-30 10:52:03 +01:00
Kristaps Fabians Geikins 5d0fceaaf3 feat: proper sign up tracking (#1489)
* feat: register flag passed to fe

* feat: mixpanel tracking for all sign ups

* feat: utm first touch & last touch tracking

* feat(helm): Allows Environment Variable for MP to be configured
- default is enabled
- renames environment variable to ENABLE_MP

* feat(helm network policy): allowlist analytics.speckle.systems

---------

Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com>
2023-03-30 12:21:59 +03:00
Iain Sproat c461397aa2 fix(helm): schema.json now matches values file (#1445)
- small typo fix to values.yaml documentation
2023-03-10 10:39:26 +00:00
Iain Sproat d3b4310672 docs(helm): schematic diagram in mermaid format (#1358)
* docs(helm): schematic diagram in mermaid format
* Clarifies that dependencies can be external or internal to cluster
* Explicitly show namespace containing secrets
2023-02-22 09:40:30 +00:00
Gergő Jedlicska 40a6701799 feat(server): add switchable admin authz override (#1378)
* feat(server): add switchable admin authz override

* fix(server): make sure tests work with the new admin override

* feat(server authz): make sure to add all requested roles to server admins in admin override mode
2023-02-17 16:31:06 +01:00
Iain Sproat dcf8bcc607 fix(monitor): logging should produce a msg field containing the message (#1363)
python logging produces an event field with the message, but all other loggers produce a msg field.
2023-02-08 15:35:43 +00:00
Iain Sproat 68fd86b754 chore(frontend): use bitnami/openresty as base image for frontend Dockerfile (#1335)
* chore(frontend): use bitnami/openresty as base image for frontend Dockerfile

openresty/openresty was not being patched as frequently as we would like, resulting in numerous
vulnerabilities without resolution. bitnami/openresty is being patched more frequently.

Some additional changes were necessary when porting our frontend between these distributions:
- html files are in /app
- nginx.conf is in /opt/bitnami/openresty/nginx/conf/nginx.conf
- envsubst is not available by default in bitnami/openresty and needs to be copied in
- Nginx.conf - we wrap the server block in http block and overwrite root nginx.conf
    - using the existing bitnami/openresty nginx.conf as a server block alone causes issues with bitnami/openresty, as bitnami/openresty provides a root nginx.conf which conflicts with directives in Speckle's server block
- we copy the directives from openresty/openresty (which are known to work with Speckle's server block), and apply them alongside Speckle's server block. This creates a new root nginx.conf which we can overwrite the default on the image.
- nginx should use a port available to non sudo/root user, we have selected 8080 instead of previous 80
- need to explicitly output nginx logs to stderr / stdout

Created a readonly root file system on Kubernetes. This requires the following changes:
- emptyDir volumes are mounted in kubernetes to allow bitnami/openresty to write to specific locations
- explicitly include and copy mime.types file to nginx configuration directory

Due to the change to non-privileged port number (8080), the following subsequent changes were required:
- Update 1-click deployment script to match frontend at port 8080
- Updates docker-compose-speckle.yaml file

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2023-01-25 19:06:48 +00:00
spgoad 38720cecdc Feature: Add OpenID Connect Generic Authentication Strategy (#1283)
* feat(server): add OIDC auth strategy

Add an OpenID Connect Authentication Strategy for Speckle Server. Enables configuration of
authentication against an OIDC standard compliant identity provider endpoint.

closes specklesystems#1270

Co-authored-by: spencer.goad <spencer.goad@disney.com>
2023-01-09 13:41:50 +00:00
Gergő Jedlicska e6484f6360 gergo/helmDisableFileUpload (#1281)
* style(server): fix formatting

* fix(preview-service): fix chromium deps in Dockerfile

* feat(helm chart): expose file uploads disable flag in the helm chart

* fix(helm chart): value name fix

* fix(helm): its values

* fix(helm chart): fix always disabled file uploads
2022-12-23 15:42:24 +01:00
Gergő Jedlicska 42ce09e651 gergo/helmDisableFileUpload (#1280)
* style(server): fix formatting

* fix(preview-service): fix chromium deps in Dockerfile

* feat(helm chart): expose file uploads disable flag in the helm chart

* fix(helm chart): value name fix

* fix(helm): its values
2022-12-23 14:59:27 +01:00
Gergő Jedlicska cd61b5b40e gergo/helmDisableFileUpload (#1279)
* style(server): fix formatting

* fix(preview-service): fix chromium deps in Dockerfile

* feat(helm chart): expose file uploads disable flag in the helm chart

* fix(helm chart): value name fix
2022-12-23 14:55:06 +01:00
Gergő Jedlicska 848d65b0a0 gergo/helmDisableFileUpload (#1278)
* style(server): fix formatting

* fix(preview-service): fix chromium deps in Dockerfile

* feat(helm chart): expose file uploads disable flag in the helm chart
2022-12-23 14:50:46 +01:00
Iain Sproat 170e52cf95 fix(helm chart): liveness probe on webhook and fileimport use distroless node path (#1271) 2022-12-14 19:42:05 +00:00
Iain Sproat 2852789df1 Use estimate instead of count when getting number of rows in table (#1266) 2022-12-13 16:25:13 +00:00
Iain Sproat 96bed71022 fix(logging): Improves error logging and pretty-prints logs during dev & test (#1255)
* Improves error logging
- use pino error logger correctly by passing in error as first argument

* monitor deployment: Filter logging at INFO level and above
* Use structured logging to create parameters for monitoring results
* Add structured logging to obj fileimport service
* Fileimport service, fix and improve logging
    - use child logger with additional context where possible
    - select appropriate logging level
- fix duplicated context in log statement
* REST endpoints, add context to structured logging and remove same context from message
* Webhook service provides context to bound logger to properly use structured logging
    - Pass bound logger containing context to `makeNetworkRequest`
    - do not log url, as it may contain a secret (like Discord's webhook urls), instead log the webhook Id
     - log error message when network call fails
* upload: make better use of structured logging when recording data
* pino-pretty when in dev or test mode
    - pino-pretty configured to send to stderr
* LOG_PRETTY env var
* Silence structured logging during testing
     - can not rely on determining the port number by reading from stdout/stderr
     - instead we determine which port is free, then create our server on that port
     - we then poll that port until the server is ready before commencing tests
* Allow puppeteer to install chromium
* Do not need to install chromium separately
2022-12-13 09:18:28 +00:00
Iain Sproat d0828693ff Enable python linting/formatting in pre-commit (#1257)
- fix all the linting/formatting issues
2022-12-09 11:20:45 +00:00
Iain Sproat d1494996a1 fix(server:helm chart): fixes readiness probe for server helm chart, path to node was broken (#1254) 2022-12-08 12:19:57 +00:00
Iain Sproat d09bce7267 feat(docker images): Distroless (#935)
* Moves speckle-server, webhook-service, fileimport-service, monitoring-deployment, and test-deployment images to Distroless.

Partially addresses https://github.com/specklesystems/speckle-server/issues/883

* preview-service uses similar image for building and production stages
* explicitly include chromium-common dependency to prevent error in preview service
* Bump chromium packages due to package versions not being found
* Handle machine-id in distroless
    - distroless has no shell, so node-machine-id will result in an error
    - this commit introduces error handling and defaults to a uuid v4 in the case of an error
* Update binary location for readiness and liveness checks to match the binary location in Distroless
* Allow node binary path to be set as environment variable in fileimport service
2022-12-07 12:07:42 +00:00
Iain Sproat ee50b32b59 chore(node): upgrades to node 18 (#1189)
* chore(node): upgrades to node 18

Node 16 was out of support (but not security upgrades), so bumping to next stable version.

https://github.com/specklesystems/speckle-server/issues/1187

* Update server liveness and readiness probes for node 18
* Bump web-ifc to 0.0.36
* Apply `--no-experimental-fetch` flag to fileimport-service to prevent issues in web-ifc (via emscripten) with node 18
2022-12-06 12:57:48 +00:00
Iain Sproat 4d01e13a84 feat(structured logging) (#1242)
* Revert "Revert structured logging 2 (#1240)"
This reverts commit 78ecaeffcb.
* Logging should not be bundled into core shared directory
* making sure observability stuff isnt bundled into frontend


Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2022-12-06 11:51:18 +00:00
Iain Sproat 78ecaeffcb Revert structured logging 2 (#1240)
* Revert "'@' shortcut must come after it is configured in bootstrap (#1239)"

This reverts commit 967329473f.

* Revert "Structured logging (attempt 2) (#1234)"

This reverts commit 444d2ca7dd.
2022-12-05 15:46:09 +00:00
Iain Sproat 444d2ca7dd Structured logging (attempt 2) (#1234)
* Revert "Revert "feat(structured logging): implements structured logging for backend (#1217)" (#1227)"

This reverts commit 63e6581162.

* Use pino-http instead of express pino logger
* Use correct reference to knex and do not instantiate HttpLogger prematurely
* Adds missing dependency for pino to webhook-service
* Do not instantiate middleware when passed to express
* Refactor to move logging into shared
* Copy shared packages into dockerfiles
* Build shared workspace in docker build-stage for fileimport & webhook
2022-12-05 14:49:52 +00:00
Iain Sproat 63e6581162 Revert "feat(structured logging): implements structured logging for backend (#1217)" (#1227)
This reverts commit 84cb74e8b3.
2022-11-25 16:57:28 +00:00
Iain Sproat 84cb74e8b3 feat(structured logging): implements structured logging for backend (#1217)
* each log line is a json object
* structured logging allows logs to be ingested by machines and the logs to be indexed and queried addresses #1105
* structured logging allows arbitrary properties to be appended to each log line, and ingestion of logs to remain robust
* Structured logging provided by `pino` library
* Add `express-pino-logger` dependency
* Remove `debug`, `morgan`, and `morgan-debug` and replace with structured logging
* `console.log` & `console.error` replaced with structured logging in backend
* Remove `DEBUG` environment variable and replace with `LOG_LEVEL`
- Note that there is a test which reads from a logged line on `stdout`. This is not robust, it would be better to use the childProcess.pid to look up the port number.
* Log errors at points we explicitly send error to Sentry
* Amend indentation of a couple of log messages to align indentation with others
2022-11-25 16:05:05 +00:00
Iain Sproat de9beccd22 Helm test is deployed as a job (#1174)
- this allows it to be identified in alerting more easily
2022-11-02 17:16:53 +00:00
Iain Sproat df250d616d Fixes broken helm template by adding quotation marks around liveness probe command (#1171) 2022-11-02 10:40:03 +00:00
Iain Sproat 0c99573bc6 Fixes liveness and readiness checks to prevent CSRF error message (#1169)
- provides content-type header
- check that status code is 200
2022-11-02 10:01:19 +00:00
Iain Sproat 3d4b3b6979 Pin python requirements and bump to latest versions (#1140)
* Pin python requirements and bump to latest versions
* fix(fileimports): add exception printing to file imports

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2022-11-01 11:17:03 +00:00
Iain Sproat d755136f19 Upgrade postgres in DO 1click template to 14.5 (#1090) 2022-10-21 09:51:50 +01:00
Iain Sproat c59084f4fd Upgrades redis to 7.0.5 in circleci & DO 1click configuration (#1087)
* Upgrades redis to 7.0.5 in docker-compose & circleci

* Upgrade redis on minikube to 7.0
2022-10-20 12:53:12 +01:00
Iain Sproat 07f7572c9d fix(helm chart): fileimport should be deployed if s3 configmap is used (#1129)
Fixes bug where fileimport-service was not deployed if an s3 configmap was used, instead of defining
s3 endpoint etc. in helm chart values
2022-10-19 16:43:12 +01:00
Iain Sproat ba71184421 upgrade development contexts to use postgres 14.5 (#1089)
* Upgrade CircleCI configuration to postgres 14.5

* docker-compose-deps upgraded to postgres 14.5

* Upgrade minikube to use postgres 14.5
2022-10-10 12:04:15 +01:00
Iain Sproat df8c6ccc4f fix(helm chart): networkPolicy supports distinct namespaces for prometheus pod & servicemonitor (#1086)
* fix(helm chart): networkPolicy supports distinct namespaces for prometheus pod & servicemonitor

Network policy did not allow ingress from prometheus if it was deployed in a different namespace
from the servicemonitor. This PR allows the ingress to be configured to match the operator's
requirements.

addresses https://github.com/specklesystems/gitOps/issues/68

* provides additional validation and error output when getting secrets
* Fix for kubernetes network policies using s3 details from ConfigMap
* Remove blocking of 10.0.0.0/8 range as this also prevents access to cloud provider private IPs
* Update values.schema.json
2022-10-07 11:39:50 +01:00
Kristaps Fabians Geikins 029aabf432 chore: getting rid of unnecessary deployment test (#1083) 2022-10-06 11:45:44 +03:00
Gergő Jedlicska 2aefbd27e1 fix(test-deployment container): fix frontend readiness tests with new vite bundling changes (#1078) 2022-10-05 17:11:13 +02:00
Gergő Jedlicska 393a192940 gergo/emailDigestFixes (#1074)
* feat(server task scheduler): sketch out core task scheduler implementation

* feat(server weekly activity digests): add function lock duration to the weekly digest execution

* feat(server scheduled tasks): add scheduled tasks type definition, db schema and migration

* feat(server scheduled tasks): add scheduled tasks repository

* feat(server task scheduler): add task scheduler service implementation

* chore(server deps): add mocha type definitions

* refactor(server scheduled tasks): refactor scheduled tasks migration

* refactor(server scheduled tasks): refactor scheduled task db schema and type definitions

* feat(server scheduled tasks): implement db side lock acquire

* refactor(server scheduled tasks): refactor task scheduler with lock on query mechanism

* test(server scheduled tasks): add tests for scheduled tasks implementation

* refactor(server weekly activity digests): refactor to new task scheduler implementation

* feat(server weekly activity digest): switch to a 1000 seconds trigger period for testing purposes

* fix(server task scheduler): fix not catching lock acquire function errors

* feat(server weekly digest): switch weekly digest cron trigger to the prod ready value

* fix(nginx configs): fix missing static route proxy to backend

* fix(server email template): fix footer anchor tags not pointing to the right places
2022-10-05 10:09:24 +02:00
Iain Sproat ee7c9f0a0c feat(helm): s3 configuration can be loaded from configmap (#1048)
* feat(helm): s3 configuration can be loaded from configmap
- Variables for s3's configuration can now be read in from a configmap in the cluster. This allows
deployment tooling, such as Terraform or CloudFormation, to dynamically create an s3 bucket and
create a configmap with the necessary values. This decouples the cluster deployment from the helm
release.
* Update values.schema.json for helm chart
- also include changes from a previous commit that had not been included previously
2022-09-30 10:34:08 +01:00