Ctrl K
ComunidadGuías…

Makefile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
CMD_AUTHGEAR ::= authgear
CMD_PORTAL ::= portal
BUILD_CTX ::= .

include ./makefiles/common.mk
include ./makefiles/go-mod-outdated.mk
include ./makefiles/govulncheck.mk
include ./makefiles/check-files-outdated.mk

.PHONY: siteadmin-api-docs
siteadmin-api-docs:
	docker run --rm -p 8101:8080 \
		-e SWAGGER_JSON=/api/siteadmin-api.yaml \
		-e OAUTH_USE_PKCE=true \
		-v $(PWD)/docs/api:/api \
		swaggerapi/swagger-ui

.PHONY: authgearonce-start
authgearonce-start: GO_RUN_TAGS += authgearonce
authgearonce-start:
	$(MAKE) start GO_RUN_TAGS::="$(GO_RUN_TAGS)"

.PHONY: authgearonce-start-portal
authgearonce-start-portal: GO_RUN_TAGS += authgearonce
authgearonce-start-portal:
	$(MAKE) start-portal GO_RUN_TAGS::="$(GO_RUN_TAGS)"

.PHONY: setup
setup: vendor
	./scripts/sh/setup-dev.sh

.PHONY: vendor
vendor:
	curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $$(go env GOPATH)/bin v2.11.3
	go mod download
	$(MAKE) build-frontend

.PHONY: build-frontend
build-frontend:
	npm --prefix ./scripts/npm ci
	npm --prefix ./authui ci
	npm --prefix ./portal ci
	$(MAKE) authui
	$(MAKE) portal

# This makefile target automates running `go mod tidy` in every directory that has a go.mod file.
.PHONY: go-mod-tidy
go-mod-tidy:
	find . -name 'go.mod' -exec sh -c 'cd $$(dirname {}); go mod tidy' \;

.PHONY: ensure-important-modules-up-to-date
ensure-important-modules-up-to-date:
	./scripts/sh/ensure-important-modules-up-to-date.sh

.PHONY: generate
generate:
	go generate ./pkg/... ./cmd/...
	cd ./e2e && go generate ./...

.PHONY: test
test:
	$(MAKE) -C ./k6 go-test
	go test ./devtools/goanalysis/... ./cmd/... ./pkg/... -timeout 1m30s

.PHONY: lint-translation-keys
lint-translation-keys:
	-go run ./devtools/gotemplatelinter --ignore-rule indentation --ignore-rule eol-at-eof ./resources/authgear/templates/en/web/authflowv2 >.make-lint-translation-keys-expect 2>&1
	git diff --exit-code .make-lint-translation-keys-expect > /dev/null 2>&1

.PHONY: lint
lint:
	golangci-lint run ./cmd/... ./pkg/... --timeout 7m
	go run ./devtools/translationlinter
	-go run ./devtools/importlinter api api >.make-lint-expect 2>&1
	-go run ./devtools/importlinter lib api util >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter admin api lib util graphqlgo >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter auth api lib util >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter portal api lib util >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter resolver api lib util >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter util api util >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter version version >> .make-lint-expect 2>&1
	-go run ./devtools/importlinter worker api lib util >> .make-lint-expect 2>&1
	-go run ./devtools/bandimportlinter ./pkg ./cmd >> .make-lint-expect 2>&1
	git diff --exit-code .make-lint-expect > /dev/null 2>&1
	go run ./devtools/gotemplatelinter --ignore-rule translation-key ./resources/authgear/templates/en/web/authflowv2
	$(MAKE) lint-translation-keys
	go run ./devtools/goanalysis ./cmd/... ./pkg/...

.PHONY: go-fix
go-fix:
	go fix -omitzero=false ./...

.PHONY: sort-translations
sort-translations:
	go run ./devtools/translationsorter

.PHONY: sort-vettedpositions
sort-vettedpositions:
	./scripts/python/sort_vettedpositions.py ./.vettedpositions

.PHONY: fmt
fmt:
	# Ignore generated files, such as wire_gen.go and *_mock_test.go
	find ./devtools ./pkg ./cmd ./e2e -name '*.go' -not -name '*_gen.go' -not -name '*_mock_test.go' | sort | xargs go tool goimports -w -format-only -local github.com/authgear/authgear-server
	$(MAKE) sort-translations

.PHONY: binary
binary:
	rm -rf ./dist
	mkdir ./dist
	$(MAKE) build AUTHGEARLITE::=1 TARGET::=authgear BIN_NAME::=./dist/authgear-lite-"$(shell go env GOOS)"-"$(shell go env GOARCH)"-${GIT_HASH}
	$(MAKE) build AUTHGEARLITE::=1 TARGET::=portal BIN_NAME::=./dist/authgear-portal-lite-"$(shell go env GOOS)"-"$(shell go env GOARCH)"-${GIT_HASH}

.PHONY: check-tidy
check-tidy:
	# For some unknown reason, `make generate` will somehow format the files again (but with a different rule).
	# So `make fmt` has to be run after `make generate`.
	$(MAKE) sort-vettedpositions
	$(MAKE) generate
	$(MAKE) go-fix
	$(MAKE) fmt
	$(MAKE) html-email
	$(MAKE) export-schemas
	$(MAKE) generate-timezones
	$(MAKE) generate-rtl
	$(MAKE) generate-twemoji-icons
	$(MAKE) generate-material-icons
	$(MAKE) graphiql
	$(MAKE) once/Dockerfile
	go mod tidy
	# We wanted to run the following, but that requires SSH, which does not work for running CI for PRs.
	# (cd custombuild && go mod tidy)
	git status --porcelain | grep '.*'; test $$? -eq 1

	$(MAKE) -C authui check-tidy
	$(MAKE) -C portal check-tidy

.PHONY: html-email
html-email:
	# Generate `.mjml` templates from `.mjml.gotemplate` files
	go run ./scripts/generatemjml/main.go -i resources/authgear/templates

	for t in $$(find resources -name '*.mjml'); do \
		./scripts/npm/node_modules/.bin/mjml -l strict "$$t" > "$${t%.mjml}.html"; \
	done

.PHONY: authui
authui:
	# Build Auth UI
	npm run --silent --prefix ./authui typecheck
	npm run --silent --prefix ./authui format
	npm run --silent --prefix ./authui build
	# Vite by default will remove the output directory before the build.
	# So we need to touch .gitkeep after the build to avoid git changes.
	touch resources/authgear/generated/.gitkeep

.PHONY: authui-dev
authui-dev:
	# Make sure that assets are generated before starting dev server
	$(MAKE) authui
	# Start development server for Auth UI
	npm run --silent --prefix ./authui dev

.PHONY: portal
portal:
	npm run --silent --prefix ./portal build
	cp -R ./portal/dist/. ./resources/portal/static/
	# Vite by default will remove the output directory before the build.
	# So we need to touch .gitkeep after the build to avoid git changes.
	touch ./portal/dist/.gitkeep

# After you run `make clean`, you have to run `make authui` and `make portal`.
.PHONY: clean
clean:
	rm -rf ./resources/portal/static
	git checkout -- ./resources/portal/static
	# It is important NOT to remove the directory.
	# Otherwise the watcher is stopped.
	rm -rf ./resources/authgear/generated/*
	git checkout -- ./resources/authgear/generated/*
	rm -rf ./portal/dist
	git checkout -- ./portal/dist
	rm -rf ./e2e/logs
	git checkout -- ./e2e/logs
	find . -name '.parcel-cache' -exec rm -rf '{}' \;
	find . -name '.stylelintcache' -exec rm -rf '{}' \;
	$(MAKE) -C ./e2e clean
	$(MAKE) -C ./k6 clean

.PHONY: export-schemas
export-schemas:
	go run ./scripts/exportschemas -s app-config -o tmp/app-config.schema.json
	go run ./scripts/exportschemas -s secrets-config -o tmp/secrets-config.schema.json
	npm run --silent --prefix ./scripts/npm export-graphql-schema admin > portal/src/graphql/adminapi/schema.graphql
	npm run --silent --prefix ./scripts/npm export-graphql-schema portal > portal/src/graphql/portal/schema.graphql
	cd portal && npm run gentype

.PHONY: export-v2-translations
export-v2-translations:
	@npm run --silent --prefix ./scripts/npm export-v2-translations

.PHONY: import-v2-translations
import-v2-translations:
	@npm run --silent --prefix ./scripts/npm import-v2-translations

.PHONY:	generate-timezones
generate-timezones:
	npm run --silent --prefix ./scripts/npm generate-go-timezones > pkg/util/tzutil/names.go

.PHONY: generate-rtl
generate-rtl:
	go run ./scripts/characterorder/main.go | gofmt > pkg/util/intl/rtl_map.go

.PHONY: check-spell-translations
check-spell-translations:
	@npm run --prefix ./scripts/npm check-spell-translations

.PHONY: generate-material-icons
generate-material-icons:
	$(MAKE) -C ./scripts/python generate-material-icons

.PHONY: generate-twemoji-icons
generate-twemoji-icons:
	$(MAKE) -C ./scripts/python generate-twemoji-icons

# This make target helps you in updating an existing translation key.
# When you are asked to update an update existing translation key, you do
# 1. Update the value in English.
# 2. `make translation-json-del-key KEY=the-key` to remove the key in other translation JSON files.
# 3. `cd scripts/python; make generate-translations` to re-generate the missing key.
.PHONY: translation-json-del-key
translation-json-del-key: KEY=
translation-json-del-key:
	find . -path './resources/authgear/templates/*/translation.json' -not -path './resources/authgear/templates/*/messages/translation.json' -not -path './resources/authgear/templates/en/translation.json' -exec sh -c "jq <\$$1 'del(.[\"$(KEY)\"])' > \$$1.tmp; mv \$$1.tmp \$$1" _ '{}' \;

# This make target take the en translation as reference, cleaup extra translation keys in other languages
.PHONY: translation-json-cleanup-others
translation-json-cleanup-others:
	find . -path './resources/authgear/templates/*/translation.json' -not -path './resources/authgear/templates/*/messages/translation.json' -not -path './resources/authgear/templates/en/translation.json' -exec sh -c "jq --slurpfile ref resources/authgear/templates/en/translation.json 'with_entries(select(.key | in(\$$ref[0])))' \$$1 > \$$1.tmp && mv \$$1.tmp \$$1" _ '{}' \;

.PHONY: templates-translation-json-del-key
templates-translation-json-del-key:
	@if [ -z "$(KEY)" ]; then echo "Error: KEY is required. Usage: make templates-translation-json-del-key KEY=my.key"; exit 1; fi
	find resources/authgear/templates -type f -path "*/messages/translation.json" ! -path "*/en/messages/*" -exec sh -c ' \
		if [ -s "$$1" ]; then \
			jq "del(.$(KEY))" "$$1" > "$$1.tmp" && mv "$$1.tmp" "$$1"; \
		fi \
	' _ {} \;

.PHONY: logs-summary
logs-summary:
	git log --first-parent --format='%as (%h) %s' $(A)..$(B)

.PHONY: mkcert-ca
mkcert-ca:
	cp "$$(mkcert -CAROOT)"/rootCA.pem ./rootCA.pem

.PHONY: mkcert
mkcert:
	rm -f tls-cert.pem tls-key.pem
	mkcert -cert-file tls-cert.pem -key-file tls-key.pem "::1" "127.0.0.1" postgres16 localhost portal.localhost accounts.localhost accounts.portal.localhost $$(ifconfig | grep 'inet 192' | awk '{print $$2}') $$(ifconfig | grep 'inet 192' | awk '{print $$2}').nip.io

.PHONY: check-dockerignore
check-dockerignore:
	./scripts/sh/check-dockerignore.sh

.PHONY: graphiql
graphiql:
	npm --prefix portalgraphiql ci
	npm --prefix portalgraphiql run build
	cp ./portalgraphiql/dist/index.html pkg/util/graphqlutil/graphiql.generated.html

.PHONY: once/Dockerfile
once/Dockerfile:
	rm -f $@
	touch $@
	cat ./once/opening.dockerfile >> $@
	printf "\n" >> $@
	sed -e '/^# syntax=/d' ./cmd/authgear/Dockerfile >> $@
	printf "\n" >> $@
	sed -e '/^# syntax=/d' ./cmd/portal/Dockerfile >> $@
	printf "\n" >> $@
	sed -e '/^# syntax=/d' ./once/partial.dockerfile >> $@

.PHONY: authgearonce-set-git-tag-name
authgearonce-set-git-tag-name:
	@./scripts/sh/authgearonce-set-git-tag-name.sh

.PHONY: authgearonce-set-AUTHGEARONCE_LICENSE_SERVER_ENV-by-tag-name
authgearonce-set-AUTHGEARONCE_LICENSE_SERVER_ENV-by-tag-name:
	@./scripts/sh/authgearonce-set-AUTHGEARONCE_LICENSE_SERVER_ENV-by-tag-name.sh

.PHONY: authgearonce-binary
ifeq ($(AUTHGEARONCE_LICENSE_SERVER_ENV), local)
GO_BUILD_TAGS += authgearonce_license_server_local
endif
ifeq ($(AUTHGEARONCE_LICENSE_SERVER_ENV), staging)
GO_BUILD_TAGS += authgearonce_license_server_staging
endif
authgearonce-binary:
	rm -rf ./dist
	mkdir ./dist
	$(MAKE) build TARGET::=once BIN_NAME::=./dist/authgear-once-"$(shell go env GOOS)"-"$(shell go env GOARCH)"