From 07ca82e599cadff9d460a4f4a32e0d0c2fa72218 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 16 Mar 2021 14:42:01 +0100 Subject: [PATCH] admin: include git build hash in gh-* tags and show build hash in admin overview Signed-off-by: Jens Langhammer --- Dockerfile | 3 + authentik/__init__.py | 1 + authentik/admin/api/version.py | 9 +- authentik/root/settings.py | 3 +- azure-pipelines.yml | 11 +- swagger.yaml | 4 + web/src/api/.gitignore | 1 + web/src/api/.openapi-generator/FILES | 167 ------------------ web/src/api/.openapi-generator/VERSION | 1 - .../admin-overview/cards/VersionStatusCard.ts | 15 +- 10 files changed, 38 insertions(+), 177 deletions(-) delete mode 100644 web/src/api/.openapi-generator/FILES delete mode 100644 web/src/api/.openapi-generator/VERSION diff --git a/Dockerfile b/Dockerfile index a806fb659..023d2e61b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,9 @@ WORKDIR / COPY --from=locker /app/requirements.txt / COPY --from=locker /app/requirements-dev.txt / +ARG GIT_BUILD_HASH +ENV GIT_BUILD_HASH=$GIT_BUILD_HASH + RUN apt-get update && \ apt-get install -y --no-install-recommends curl ca-certificates gnupg && \ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \ diff --git a/authentik/__init__.py b/authentik/__init__.py index 28c14da6e..b57ae50aa 100644 --- a/authentik/__init__.py +++ b/authentik/__init__.py @@ -1,2 +1,3 @@ """authentik""" __version__ = "2021.3.3" +ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" diff --git a/authentik/admin/api/version.py b/authentik/admin/api/version.py index 2d7a941d0..3aa85277a 100644 --- a/authentik/admin/api/version.py +++ b/authentik/admin/api/version.py @@ -1,4 +1,6 @@ """authentik administration overview""" +from os import environ + from django.core.cache import cache from django.db.models import Model from drf_yasg2.utils import swagger_auto_schema @@ -11,7 +13,7 @@ from rest_framework.response import Response from rest_framework.serializers import Serializer from rest_framework.viewsets import GenericViewSet -from authentik import __version__ +from authentik import ENV_GIT_HASH_KEY, __version__ from authentik.admin.tasks import VERSION_CACHE_KEY, update_latest_version @@ -20,8 +22,13 @@ class VersionSerializer(Serializer): version_current = SerializerMethodField() version_latest = SerializerMethodField() + build_hash = SerializerMethodField() outdated = SerializerMethodField() + def get_build_hash(self, _) -> str: + """Get build hash, if version is not latest or released""" + return environ.get(ENV_GIT_HASH_KEY, "") + def get_version_current(self, _) -> str: """Get current version""" return __version__ diff --git a/authentik/root/settings.py b/authentik/root/settings.py index 3e1e534f2..f701ace12 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -24,7 +24,7 @@ from sentry_sdk.integrations.celery import CeleryIntegration from sentry_sdk.integrations.django import DjangoIntegration from sentry_sdk.integrations.redis import RedisIntegration -from authentik import __version__ +from authentik import ENV_GIT_HASH_KEY, __version__ from authentik.core.middleware import structlog_add_request_id from authentik.lib.config import CONFIG from authentik.lib.logging import add_process_id @@ -474,6 +474,7 @@ for _app in INSTALLED_APPS: if DEBUG: CELERY_TASK_ALWAYS_EAGER = True + os.environ[ENV_GIT_HASH_KEY] = "dev" INSTALLED_APPS.append("authentik.core.apps.AuthentikCoreConfig") diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 596ce8461..126d2ebea 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -381,6 +381,13 @@ stages: inputs: containerRegistry: 'beryjuorg-harbor' repository: 'authentik/server' - command: 'buildAndPush' + command: 'build' Dockerfile: 'Dockerfile' - tags: "gh-$(branchName)" + tags: 'gh-$(branchName)' + arguments: '--build-arg GIT_BUILD_HASH=$(git rev-parse HEAD)' + - task: Docker@2 + inputs: + containerRegistry: 'beryjuorg-harbor' + repository: 'authentik/server' + command: 'push' + tags: 'gh-$(branchName)' diff --git a/swagger.yaml b/swagger.yaml index 5f7d6e9d7..321234d20 100755 --- a/swagger.yaml +++ b/swagger.yaml @@ -10106,6 +10106,10 @@ definitions: title: Version latest type: string readOnly: true + build_hash: + title: Build hash + type: string + readOnly: true outdated: title: Outdated type: boolean diff --git a/web/src/api/.gitignore b/web/src/api/.gitignore index d973fa4fa..2b9f4aa81 100644 --- a/web/src/api/.gitignore +++ b/web/src/api/.gitignore @@ -2,3 +2,4 @@ apis/** models/** index.ts runtime.ts +.openapi-generator/** diff --git a/web/src/api/.openapi-generator/FILES b/web/src/api/.openapi-generator/FILES deleted file mode 100644 index e6cc1a8c5..000000000 --- a/web/src/api/.openapi-generator/FILES +++ /dev/null @@ -1,167 +0,0 @@ -apis/AdminApi.ts -apis/CoreApi.ts -apis/CryptoApi.ts -apis/EventsApi.ts -apis/FlowsApi.ts -apis/OutpostsApi.ts -apis/PoliciesApi.ts -apis/PropertymappingsApi.ts -apis/ProvidersApi.ts -apis/RootApi.ts -apis/SourcesApi.ts -apis/StagesApi.ts -apis/index.ts -index.ts -models/Application.ts -models/AuthenticateWebAuthnStage.ts -models/AuthenticatorStaticStage.ts -models/AuthenticatorTOTPStage.ts -models/AuthenticatorValidateStage.ts -models/Cache.ts -models/CaptchaStage.ts -models/CertificateData.ts -models/CertificateKeyPair.ts -models/Challenge.ts -models/Config.ts -models/ConsentStage.ts -models/Coordinate.ts -models/DenyStage.ts -models/DockerServiceConnection.ts -models/DummyPolicy.ts -models/DummyStage.ts -models/EmailStage.ts -models/ErrorDetail.ts -models/Event.ts -models/EventMatcherPolicy.ts -models/EventTopPerUser.ts -models/ExpressionPolicy.ts -models/Flow.ts -models/FlowDiagram.ts -models/FlowStageBinding.ts -models/Group.ts -models/GroupMembershipPolicy.ts -models/HaveIBeenPwendPolicy.ts -models/IPReputation.ts -models/IdentificationStage.ts -models/InlineResponse200.ts -models/InlineResponse2001.ts -models/InlineResponse20010.ts -models/InlineResponse20011.ts -models/InlineResponse20012.ts -models/InlineResponse20013.ts -models/InlineResponse20014.ts -models/InlineResponse20015.ts -models/InlineResponse20016.ts -models/InlineResponse20017.ts -models/InlineResponse20018.ts -models/InlineResponse20019.ts -models/InlineResponse2002.ts -models/InlineResponse20020.ts -models/InlineResponse20021.ts -models/InlineResponse20022.ts -models/InlineResponse20023.ts -models/InlineResponse20024.ts -models/InlineResponse20025.ts -models/InlineResponse20026.ts -models/InlineResponse20027.ts -models/InlineResponse20028.ts -models/InlineResponse20029.ts -models/InlineResponse2003.ts -models/InlineResponse20030.ts -models/InlineResponse20031.ts -models/InlineResponse20032.ts -models/InlineResponse20033.ts -models/InlineResponse20034.ts -models/InlineResponse20035.ts -models/InlineResponse20036.ts -models/InlineResponse20037.ts -models/InlineResponse20038.ts -models/InlineResponse20039.ts -models/InlineResponse2004.ts -models/InlineResponse20040.ts -models/InlineResponse20041.ts -models/InlineResponse20042.ts -models/InlineResponse20043.ts -models/InlineResponse20044.ts -models/InlineResponse20045.ts -models/InlineResponse20046.ts -models/InlineResponse20047.ts -models/InlineResponse20048.ts -models/InlineResponse20049.ts -models/InlineResponse2005.ts -models/InlineResponse20050.ts -models/InlineResponse20051.ts -models/InlineResponse20052.ts -models/InlineResponse20053.ts -models/InlineResponse20054.ts -models/InlineResponse20055.ts -models/InlineResponse20056.ts -models/InlineResponse20057.ts -models/InlineResponse20058.ts -models/InlineResponse20059.ts -models/InlineResponse2006.ts -models/InlineResponse20060.ts -models/InlineResponse2007.ts -models/InlineResponse2008.ts -models/InlineResponse2009.ts -models/InlineResponse200Pagination.ts -models/Invitation.ts -models/InvitationStage.ts -models/KubernetesServiceConnection.ts -models/LDAPPropertyMapping.ts -models/LDAPSource.ts -models/LDAPSourceSyncStatus.ts -models/LoginMetrics.ts -models/Notification.ts -models/NotificationRule.ts -models/NotificationRuleGroup.ts -models/NotificationRuleGroupParent.ts -models/NotificationRuleTransports.ts -models/NotificationTransport.ts -models/NotificationTransportTest.ts -models/OAuth2Provider.ts -models/OAuth2ProviderSetupURLs.ts -models/OAuthSource.ts -models/OpenIDConnectConfiguration.ts -models/Outpost.ts -models/OutpostHealth.ts -models/PasswordExpiryPolicy.ts -models/PasswordPolicy.ts -models/PasswordStage.ts -models/Policy.ts -models/PolicyBinding.ts -models/PolicyBindingPolicy.ts -models/PolicyBindingUser.ts -models/PolicyBindingUserAkGroups.ts -models/PolicyBindingUserGroups.ts -models/PolicyBindingUserSources.ts -models/PolicyBindingUserUserPermissions.ts -models/Prompt.ts -models/PromptStage.ts -models/PropertyMapping.ts -models/Provider.ts -models/ProxyOutpostConfig.ts -models/ProxyProvider.ts -models/ReputationPolicy.ts -models/SAMLMetadata.ts -models/SAMLPropertyMapping.ts -models/SAMLProvider.ts -models/SAMLSource.ts -models/ScopeMapping.ts -models/ServiceConnection.ts -models/ServiceConnectionState.ts -models/Source.ts -models/Stage.ts -models/Task.ts -models/Token.ts -models/TokenView.ts -models/TypeCreate.ts -models/User.ts -models/UserDeleteStage.ts -models/UserLoginStage.ts -models/UserLogoutStage.ts -models/UserReputation.ts -models/UserWriteStage.ts -models/Version.ts -models/index.ts -runtime.ts diff --git a/web/src/api/.openapi-generator/VERSION b/web/src/api/.openapi-generator/VERSION deleted file mode 100644 index c30f0ec2b..000000000 --- a/web/src/api/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -5.1.0-SNAPSHOT \ No newline at end of file diff --git a/web/src/pages/admin-overview/cards/VersionStatusCard.ts b/web/src/pages/admin-overview/cards/VersionStatusCard.ts index c72179d64..083008a41 100644 --- a/web/src/pages/admin-overview/cards/VersionStatusCard.ts +++ b/web/src/pages/admin-overview/cards/VersionStatusCard.ts @@ -12,17 +12,22 @@ export class VersionStatusCard extends AdminStatusCard { } getStatus(value: Version): Promise { + if (value.buildHash) { + return Promise.resolve({ + icon: "fa fa-check-circle pf-m-success", + message: gettext(`Build hash: ${value.buildHash?.substring(0, 10)}`), + }); + } if (value.outdated) { return Promise.resolve({ icon: "fa fa-exclamation-triangle pf-m-warning", message: gettext(`${value.versionLatest} is available!`), }); - } else { - return Promise.resolve({ - icon: "fa fa-check-circle pf-m-success", - message: gettext("Up-to-date!") - }); } + return Promise.resolve({ + icon: "fa fa-check-circle pf-m-success", + message: gettext("Up-to-date!") + }); } renderValue(): TemplateResult {