2023-09-25 20:15:59 +00:00
.PHONY : gen dev -reset all clean test web website
2023-09-25 21:10:34 +00:00
.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-25 21:17:03 +00:00
DOCKER_IMAGE ?= "authentik:test"
2021-05-11 18:02:17 +00:00
2023-09-25 21:06:59 +00:00
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)
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-25 20:34:59 +00:00
all : lint -fix lint test gen web ## Lint, build, and test everything
2023-09-27 22:30:56 +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-25 20:34:59 +00:00
help : ## Show this help
@echo "\nSpecify a command. The choices are:\n"
2023-09-27 22:30:56 +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-25 21:16:42 +00:00
sort
2023-09-25 20:34:59 +00:00
@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-25 21:17:03 +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-25 21:17:03 +00:00
docker-compose run -u root server test-all
2022-05-07 19:22:33 +00:00
rm -f .env
2023-09-25 21:17:03 +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-25 20:34:59 +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-25 20:34:59 +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-25 20:34:59 +00:00
migrate : ## Run the Authentik Django server's migrations
2022-09-11 21:01:26 +00:00
python -m lifecycle.migrate
2023-09-25 20:34:59 +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-25 21:17:03 +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-25 20:34:59 +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-25 21:17:03 +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-25 21:17:03 +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-25 21:17:03 +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-25 21:17:03 +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-25 21:17:03 +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-25 20:34:59 +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-25 20:34:59 +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-25 20:34:59 +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-25 20:34:59 +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
2023-09-25 21:17:03 +00:00
web-lint-fix :
2021-11-18 20:01:58 +00:00
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-25 21:17:03 +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-25 20:34:59 +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-25 21:17:03 +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