2023-09-26 10:10:18 +00:00
.PHONY : gen dev -reset all clean test web website
.SHELLFLAGS += ${ SHELLFLAGS } -e
2021-05-11 18:02:17 +00:00
PWD = $( shell pwd )
2021-05-16 21:14:51 +00:00
UID = $( shell id -u)
GID = $( shell id -g)
2021-08-23 08:09:56 +00:00
NPM_VERSION = $( shell python -m scripts.npm_version)
2023-04-18 11:28:19 +00:00
PY_SOURCES = authentik tests scripts lifecycle
2023-09-26 10:10:18 +00:00
DOCKER_IMAGE ?= "authentik:test"
pg_user := $( shell python -m authentik.lib.config postgresql.user 2>/dev/null)
pg_host := $( shell python -m authentik.lib.config postgresql.host 2>/dev/null)
pg_name := $( shell python -m authentik.lib.config postgresql.name 2>/dev/null)
2021-05-11 18:02:17 +00:00
2023-03-23 23:24:55 +00:00
CODESPELL_ARGS = -D - -D .github/codespell-dictionary.txt \
-I .github/codespell-words.txt \
-S 'web/src/locales/**' \
authentik \
internal \
cmd \
web/src \
website/src \
website/blog \
website/developer-docs \
website/docs \
website/integrations \
website/src
2023-09-26 10:10:18 +00:00
all : lint -fix lint test gen web ## Lint, build, and test everything
web: laying the groundwork for future expansion
This commit is a hodge-podge of updates and changes to the web. Functional changes:
- Makefile: Fixed a bug in the `help` section that prevented the WIDTH from being accurately
calculated if `help` was included rather than in-lined.
- ESLint: Modified the "unused vars" rule so that variables starting with an underline are not
considered by the rule. This allows for elided variables in event handlers. It's not a perfect
solution-- a better one would be to use Typescript's function-specialization typing, but there are
too many places where we elide or ignore some variables in a function's usage that switching over
to specialization would be a huge lift.
- locale: It turns out, lit-locale does its own context management. We don't need to have a context
at all in this space, and that's one less listener we need to attach t othe DOM.
- ModalButton: A small thing, but using `nothing` instead of "html``" allows lit better control over
rendering and reduces the number of actual renders of the page.
- FormGroup: Provided a means to modify the aria-label, rather than stick with the just the word
"Details." Specializing this field will both help users of screen readers in the future, and will
allow test suites to find specific form groups now.
- RadioButton: provide a more consistent interface to the RadioButton. First, we dispatch the
events to the outside world, and we set the value locally so that the current `Form.ts` continues
to behave as expected. We also prevent the "button lost value" event from propagating; this
presents a unified select-like interface to users of the RadioButtonGroup. The current value
semantics are preserved; other clients of the RadioButton do not see a change in behavior.
- EventEmitter: If the custom event detail is *not* an object, do not use the object-like semantics
for forwarding it; just send it as-is.
- Comments: In the course of laying the groundwork for the application wizard, I throw a LOT of
comments into the code, describing APIs, interfaces, class and function signatures, to better
document the behavior inside and as signposts for future work.
2023-10-02 19:16:58 +00:00
HELP_WIDTH := $( shell grep -h '^[a-z][^ ]*:.*\#\#' $( MAKEFILE_LIST) 2>/dev/null | \
cut -d':' -f1 | awk '{printf "%d\n", length}' | sort -rn | head -1)
2023-09-26 10:10:18 +00:00
help : ## Show this help
@echo "\nSpecify a command. The choices are:\n"
web: laying the groundwork for future expansion
This commit is a hodge-podge of updates and changes to the web. Functional changes:
- Makefile: Fixed a bug in the `help` section that prevented the WIDTH from being accurately
calculated if `help` was included rather than in-lined.
- ESLint: Modified the "unused vars" rule so that variables starting with an underline are not
considered by the rule. This allows for elided variables in event handlers. It's not a perfect
solution-- a better one would be to use Typescript's function-specialization typing, but there are
too many places where we elide or ignore some variables in a function's usage that switching over
to specialization would be a huge lift.
- locale: It turns out, lit-locale does its own context management. We don't need to have a context
at all in this space, and that's one less listener we need to attach t othe DOM.
- ModalButton: A small thing, but using `nothing` instead of "html``" allows lit better control over
rendering and reduces the number of actual renders of the page.
- FormGroup: Provided a means to modify the aria-label, rather than stick with the just the word
"Details." Specializing this field will both help users of screen readers in the future, and will
allow test suites to find specific form groups now.
- RadioButton: provide a more consistent interface to the RadioButton. First, we dispatch the
events to the outside world, and we set the value locally so that the current `Form.ts` continues
to behave as expected. We also prevent the "button lost value" event from propagating; this
presents a unified select-like interface to users of the RadioButtonGroup. The current value
semantics are preserved; other clients of the RadioButton do not see a change in behavior.
- EventEmitter: If the custom event detail is *not* an object, do not use the object-like semantics
for forwarding it; just send it as-is.
- Comments: In the course of laying the groundwork for the application wizard, I throw a LOT of
comments into the code, describing APIs, interfaces, class and function signatures, to better
document the behavior inside and as signposts for future work.
2023-10-02 19:16:58 +00:00
@grep -Eh '^[0-9a-zA-Z_-]+:.*?## .*$$' $( MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " \033[0;36m%-$(HELP_WIDTH)s \033[m %s\n", $$1, $$2}' | \
2023-09-26 10:10:18 +00:00
sort
@echo ""
2020-09-02 22:04:12 +00:00
2022-01-24 19:50:13 +00:00
test-go :
2022-01-24 20:41:15 +00:00
go test -timeout 0 -v -race -cover ./...
2022-01-24 19:50:13 +00:00
2023-09-26 10:10:18 +00:00
test-docker : ## Run all tests in a docker-compose
2022-05-07 19:22:33 +00:00
echo " PG_PASS= $( openssl rand -base64 32) " >> .env
echo " AUTHENTIK_SECRET_KEY= $( openssl rand -base64 32) " >> .env
docker-compose pull -q
docker-compose up --no-start
docker-compose start postgresql redis
2023-09-26 10:10:18 +00:00
docker-compose run -u root server test-all
2022-05-07 19:22:33 +00:00
rm -f .env
2023-09-26 10:10:18 +00:00
test : ## Run the server tests and produce a coverage report (locally)
2022-09-17 11:16:53 +00:00
coverage run manage.py test --keepdb authentik
2020-09-02 22:04:12 +00:00
coverage html
coverage report
2023-09-26 10:10:18 +00:00
lint-fix : ## Lint and automatically fix errors in the python source code. Reports spelling errors.
2023-04-18 11:28:19 +00:00
isort authentik $( PY_SOURCES)
black authentik $( PY_SOURCES)
ruff authentik $( PY_SOURCES)
2023-03-23 23:24:55 +00:00
codespell -w $( CODESPELL_ARGS)
2020-09-02 22:04:12 +00:00
2023-09-26 10:10:18 +00:00
lint : ## Lint the python and golang sources
2023-04-18 11:28:19 +00:00
pylint $( PY_SOURCES)
bandit -r $( PY_SOURCES) -x node_modules
2021-12-22 09:33:21 +00:00
golangci-lint run -v
2020-09-02 22:04:12 +00:00
2023-09-26 10:10:18 +00:00
migrate : ## Run the Authentik Django server's migrations
2022-09-11 21:01:26 +00:00
python -m lifecycle.migrate
2023-09-26 10:10:18 +00:00
i18n-extract : i 18n -extract -core web -i 18n -extract ## Extract strings that require translation into files to send to a translation service
2021-11-19 09:20:31 +00:00
i18n-extract-core :
2022-08-05 06:39:00 +00:00
ak makemessages --ignore web --ignore internal --ignore web --ignore web-api --ignore website -l en
2021-10-09 18:07:28 +00:00
2023-09-26 10:10:18 +00:00
install : web -install website -install ## Install all requires dependencies for `web`, `website` and `core`
poetry install
dev-drop-db :
echo dropdb -U ${ pg_user } -h ${ pg_host } ${ pg_name }
# Also remove the test-db if it exists
dropdb -U ${ pg_user } -h ${ pg_host } test_${ pg_name } || true
echo redis-cli -n 0 flushall
dev-create-db :
createdb -U ${ pg_user } -h ${ pg_host } ${ pg_name }
dev-reset : dev -drop -db dev -create -db migrate ## Drop and restore the Authentik PostgreSQL instance to a "fresh install" state.
2022-09-11 21:01:26 +00:00
#########################
## API Schema
#########################
2023-09-26 10:10:18 +00:00
gen-build : ## Extract the schema from the database
2022-08-05 06:39:00 +00:00
AUTHENTIK_DEBUG = true ak make_blueprint_schema > blueprints/schema.json
AUTHENTIK_DEBUG = true ak spectacular --file schema.yml
2021-05-16 19:07:01 +00:00
2023-09-26 10:10:18 +00:00
gen-changelog : ## (Release) generate the changelog based from the commits since the last tag
2023-03-28 10:05:44 +00:00
git log --pretty= format:" - %s" $( shell git describe --tags $( shell git rev-list --tags --max-count= 1) ) ...$( shell git branch --show-current) | sort > changelog.md
2023-04-13 12:11:46 +00:00
npx prettier --write changelog.md
2023-03-28 10:05:44 +00:00
2023-09-26 10:10:18 +00:00
gen-diff : ## (Release) generate the changelog diff between the current schema and the last tag
2023-03-28 10:05:44 +00:00
git show $( shell git describe --tags $( shell git rev-list --tags --max-count= 1) ) :schema.yml > old_schema.yml
2022-09-11 21:01:26 +00:00
docker run \
--rm -v ${ PWD } :/local \
--user ${ UID } :${ GID } \
2023-04-01 16:10:52 +00:00
docker.io/openapitools/openapi-diff:2.1.0-beta.6 \
2022-09-11 21:01:26 +00:00
--markdown /local/diff.md \
/local/old_schema.yml /local/schema.yml
rm old_schema.yml
2023-04-13 12:11:46 +00:00
npx prettier --write diff.md
2022-09-11 21:01:26 +00:00
2021-05-20 20:06:55 +00:00
gen-clean :
rm -rf web/api/src/
2021-06-16 10:02:02 +00:00
rm -rf api/
2021-05-20 20:06:55 +00:00
2023-09-26 10:10:18 +00:00
gen-client-ts : ## Build and install the authentik API for Typescript into the authentik UI Application
2021-05-11 18:02:17 +00:00
docker run \
--rm -v ${ PWD } :/local \
2021-05-16 21:14:51 +00:00
--user ${ UID } :${ GID } \
2023-04-01 16:10:52 +00:00
docker.io/openapitools/openapi-generator-cli:v6.5.0 generate \
2021-05-15 21:57:28 +00:00
-i /local/schema.yml \
2021-05-11 18:02:17 +00:00
-g typescript-fetch \
2022-05-08 14:48:53 +00:00
-o /local/gen-ts-api \
2022-10-21 07:08:25 +00:00
-c /local/scripts/api-ts-config.yaml \
--additional-properties= npmVersion = ${ NPM_VERSION } \
2022-09-14 22:05:21 +00:00
--git-repo-id authentik \
--git-user-id goauthentik
2021-08-23 08:32:37 +00:00
mkdir -p web/node_modules/@goauthentik/api
2022-05-08 14:48:53 +00:00
cd gen-ts-api && npm i
2022-06-30 20:18:21 +00:00
\c p -rfv gen-ts-api/* web/node_modules/@goauthentik/api
2020-09-10 14:58:25 +00:00
2023-09-26 10:10:18 +00:00
gen-client-go : ## Build and install the authentik API for Golang
2023-04-01 16:10:52 +00:00
mkdir -p ./gen-go-api ./gen-go-api/templates
wget https://raw.githubusercontent.com/goauthentik/client-go/main/config.yaml -O ./gen-go-api/config.yaml
wget https://raw.githubusercontent.com/goauthentik/client-go/main/templates/README.mustache -O ./gen-go-api/templates/README.mustache
wget https://raw.githubusercontent.com/goauthentik/client-go/main/templates/go.mod.mustache -O ./gen-go-api/templates/go.mod.mustache
cp schema.yml ./gen-go-api/
2021-05-16 19:07:01 +00:00
docker run \
2023-04-01 16:10:52 +00:00
--rm -v ${ PWD } /gen-go-api:/local \
2021-05-16 21:14:51 +00:00
--user ${ UID } :${ GID } \
2023-04-01 16:10:52 +00:00
docker.io/openapitools/openapi-generator-cli:v6.5.0 generate \
2021-05-16 19:07:01 +00:00
-i /local/schema.yml \
-g go \
2023-04-01 16:10:52 +00:00
-o /local/ \
2021-11-05 09:37:30 +00:00
-c /local/config.yaml
2022-05-08 14:48:53 +00:00
go mod edit -replace goauthentik.io/api/v3= ./gen-go-api
2023-04-01 16:10:52 +00:00
rm -rf ./gen-go-api/config.yaml ./gen-go-api/templates/
2021-05-16 19:07:01 +00:00
2023-09-26 10:10:18 +00:00
gen-dev-config : ## Generate a local development config file
2022-08-01 21:05:58 +00:00
python -m scripts.generate_config
2022-09-11 21:01:26 +00:00
gen : gen -build gen -clean gen -client -ts
2021-11-18 20:01:58 +00:00
2022-05-10 19:05:22 +00:00
#########################
## Web
#########################
2021-12-06 20:13:04 +00:00
2023-09-26 10:10:18 +00:00
web-build : web -install ## Build the Authentik UI
2022-06-05 21:26:08 +00:00
cd web && npm run build
2023-09-26 10:10:18 +00:00
web : web -lint -fix web -lint web -check -compile web -i 18n -extract ## Automatically fix formatting issues in the Authentik UI source code, lint the code, and compile it
2021-11-18 20:01:58 +00:00
2023-09-26 10:10:18 +00:00
web-install : ## Install the necessary libraries to build the Authentik UI
2022-05-10 19:05:22 +00:00
cd web && npm ci
2023-09-26 10:10:18 +00:00
web-watch : ## Build and watch the Authentik UI for changes, updating automatically
2022-06-25 22:46:40 +00:00
rm -rf web/dist/
mkdir web/dist/
touch web/dist/.gitkeep
2022-05-10 19:05:22 +00:00
cd web && npm run watch
2023-09-26 10:10:18 +00:00
web-storybook-watch : ## Build and run the storybook documentation server
2023-08-03 15:27:58 +00:00
cd web && npm run storybook
2021-11-18 20:01:58 +00:00
web-lint-fix :
cd web && npm run prettier
web-lint :
cd web && npm run lint
2023-08-30 10:46:58 +00:00
cd web && npm run lit-analyse
2021-11-19 09:20:31 +00:00
2023-01-01 22:32:05 +00:00
web-check-compile :
cd web && npm run tsc
2023-06-06 10:32:32 +00:00
web-i18n-extract :
2023-06-12 13:41:44 +00:00
cd web && npm run extract-locales
2021-11-21 21:47:10 +00:00
2022-05-10 19:05:22 +00:00
#########################
## Website
#########################
2023-09-26 10:10:18 +00:00
website : website -lint -fix website -build ## Automatically fix formatting issues in the Authentik website/docs source code, lint the code, and compile it
2022-05-10 19:05:22 +00:00
website-install :
cd website && npm ci
website-lint-fix :
cd website && npm run prettier
2022-10-18 19:38:01 +00:00
website-build :
cd website && npm run build
2023-09-26 10:10:18 +00:00
website-watch : ## Build and watch the documentation website, updating automatically
2022-05-10 19:05:22 +00:00
cd website && npm run watch
2023-09-13 13:00:51 +00:00
#########################
## Docker
#########################
2023-09-26 10:10:18 +00:00
docker : ## Build a docker image of the current source tree
DOCKER_BUILDKIT = 1 docker build . --progress plain --tag ${ DOCKER_IMAGE }
2023-09-13 13:00:51 +00:00
#########################
## CI
#########################
2021-11-21 21:47:10 +00:00
# These targets are use by GitHub actions to allow usage of matrix
# which makes the YAML File a lot smaller
2023-09-13 13:00:51 +00:00
2021-12-24 22:25:38 +00:00
ci--meta-debug :
python -V
node --version
ci-pylint : ci --meta -debug
2022-09-06 22:23:25 +00:00
pylint $( PY_SOURCES)
2021-11-21 21:47:10 +00:00
2021-12-24 22:25:38 +00:00
ci-black : ci --meta -debug
2022-09-06 22:23:25 +00:00
black --check $( PY_SOURCES)
2021-11-21 21:47:10 +00:00
2023-04-18 11:28:19 +00:00
ci-ruff : ci --meta -debug
ruff check $( PY_SOURCES)
2023-03-23 23:24:55 +00:00
ci-codespell : ci --meta -debug
codespell $( CODESPELL_ARGS) -s
2021-12-24 22:25:38 +00:00
ci-isort : ci --meta -debug
2022-09-06 22:23:25 +00:00
isort --check $( PY_SOURCES)
2021-11-21 21:47:10 +00:00
2021-12-24 22:25:38 +00:00
ci-bandit : ci --meta -debug
2022-09-06 22:23:25 +00:00
bandit -r $( PY_SOURCES)
2021-11-21 21:47:10 +00:00
2021-12-24 22:25:38 +00:00
ci-pyright : ci --meta -debug
2022-09-06 22:23:25 +00:00
./web/node_modules/.bin/pyright $( PY_SOURCES)
2021-12-03 09:05:21 +00:00
2021-12-24 22:25:38 +00:00
ci-pending-migrations : ci --meta -debug
2022-08-05 06:39:00 +00:00
ak makemigrations --check