ci: migrate ci to gh actions (#1315)
This commit is contained in:
parent
b1eec5a7d2
commit
69f4d54bae
|
@ -0,0 +1,203 @@
|
||||||
|
name: authentik-ci-main
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths-ignore:
|
||||||
|
- website
|
||||||
|
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: authentik
|
||||||
|
POSTGRES_USER: authentik
|
||||||
|
POSTGRES_PASSWORD: "EK-5jnKfjrGRm<77"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint-pylint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run pylint
|
||||||
|
run: pipenv run pylint authentik tests lifecycle
|
||||||
|
lint-black:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run black
|
||||||
|
run: pipenv run black --check authentik tests lifecycle
|
||||||
|
lint-isort:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run isort
|
||||||
|
run: pipenv run isort --check authentik tests lifecycle
|
||||||
|
lint-bandit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run bandit
|
||||||
|
run: pipenv run bandit -r authentik tests lifecycle
|
||||||
|
lint-pyright:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- name: prepare
|
||||||
|
run: |
|
||||||
|
scripts/ci_prepare.sh
|
||||||
|
npm install -g pyright@1.1.136
|
||||||
|
- name: run bandit
|
||||||
|
run: pipenv run pyright e2e lifecycle
|
||||||
|
test-migrations:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run migrations
|
||||||
|
run: pipenv run python -m lifecycle.migrate
|
||||||
|
test-migrations-from-stable:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: checkout stable
|
||||||
|
run: |
|
||||||
|
# Copy current, latest config to local
|
||||||
|
cp authentik/lib/default.yml local.env.yml
|
||||||
|
git checkout $(git describe --abbrev=0 --match 'version/*')
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run migrations to stable
|
||||||
|
run: pipenv run python -m lifecycle.migrate
|
||||||
|
- name: checkout current code
|
||||||
|
run: |
|
||||||
|
set -x
|
||||||
|
git checkout $GITHUB_REF
|
||||||
|
pipenv sync --dev
|
||||||
|
- name: migrate to latest
|
||||||
|
run: pipenv run python -m lifecycle.migrate
|
||||||
|
test-unittest:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: run unittest
|
||||||
|
run: |
|
||||||
|
pipenv run make test
|
||||||
|
pipenv run coverage xml
|
||||||
|
- uses: codecov/codecov-action@v2
|
||||||
|
test-integration:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- name: prepare
|
||||||
|
run: scripts/ci_prepare.sh
|
||||||
|
- name: prepare k3d
|
||||||
|
run: |
|
||||||
|
wget -q -O - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
|
||||||
|
k3d cluster create
|
||||||
|
k3d kubeconfig write -o ~/.kube/config --overwrite
|
||||||
|
- name: run integration
|
||||||
|
run: |
|
||||||
|
pipenv run make test-integration
|
||||||
|
pipenv run coverage xml
|
||||||
|
- uses: codecov/codecov-action@v2
|
||||||
|
test-e2e:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: web/package-lock.json
|
||||||
|
- name: prepare
|
||||||
|
run: |
|
||||||
|
scripts/ci_prepare.sh
|
||||||
|
docker-compose -f tests/e2e/ci.docker-compose.yml up -d
|
||||||
|
- name: prepare web ui
|
||||||
|
run: |
|
||||||
|
cd web
|
||||||
|
npm i
|
||||||
|
npm run build
|
||||||
|
- name: run e2e
|
||||||
|
run: |
|
||||||
|
pipenv run make test-e2e
|
||||||
|
pipenv run coverage xml
|
||||||
|
- uses: codecov/codecov-action@v2
|
||||||
|
build:
|
||||||
|
needs:
|
||||||
|
- lint-pylint
|
||||||
|
- lint-black
|
||||||
|
- lint-isort
|
||||||
|
- lint-bandit
|
||||||
|
- lint-pyright
|
||||||
|
- test-migrations
|
||||||
|
- test-migrations-from-stable
|
||||||
|
- test-unittest
|
||||||
|
- test-integration
|
||||||
|
- test-e2e
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v1.2.0
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
- name: prepare variables
|
||||||
|
id: ev
|
||||||
|
run: |
|
||||||
|
python ./scripts/gh_do_set_branch.py
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
registry: beryju.org
|
||||||
|
username: ${{ secrets.HARBOR_USERNAME }}
|
||||||
|
password: ${{ secrets.HARBOR_PASSWORD }}
|
||||||
|
- name: Building Docker Image
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
tags: |
|
||||||
|
beryju.org/authentik/server:gh-${{ steps.ev.outputs.branchName }},
|
||||||
|
beryju.org/authentik/server:gh-${{ env.GITHUB_SHA }}
|
||||||
|
build-args: |
|
||||||
|
GIT_BUILD_HASH=${{ env.GITHUB_SHA }}
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: authentik-ci-outpost
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint-golint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: '^1.16.3'
|
||||||
|
- name: Generate API
|
||||||
|
run: |
|
||||||
|
make gen-outpost
|
||||||
|
- name: Run linter
|
||||||
|
run: |
|
||||||
|
# Create folder structure for go embeds
|
||||||
|
mkdir -p web/dist
|
||||||
|
mkdir -p website/help
|
||||||
|
touch web/dist/test website/help/test
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
-v $(pwd):/app \
|
||||||
|
-w /app \
|
||||||
|
golangci/golangci-lint:v1.39.0 \
|
||||||
|
golangci-lint run -v --timeout 200s
|
||||||
|
build:
|
||||||
|
needs:
|
||||||
|
- lint-golint
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
type:
|
||||||
|
- proxy
|
||||||
|
- ldap
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v1.2.0
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
- name: prepare variables
|
||||||
|
id: ev
|
||||||
|
run: |
|
||||||
|
python ./scripts/gh_do_set_branch.py
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
registry: beryju.org
|
||||||
|
username: ${{ secrets.HARBOR_USERNAME }}
|
||||||
|
password: ${{ secrets.HARBOR_PASSWORD }}
|
||||||
|
- name: Building Docker Image
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
tags: |
|
||||||
|
beryju.org/authentik/outpost-${{ matrix.type }}:gh-${{ steps.ev.outputs.branchName }},
|
||||||
|
beryju.org/authentik/outpost-${{ matrix.type }}:gh-${{ steps.ev.outputs.branchName }}-${{ steps.ev.outputs.timestamp }},
|
||||||
|
beryju.org/authentik/outpost-${{ matrix.type }}:gh-${{ env.GITHUB_SHA }}
|
||||||
|
file: ${{ matrix.type }}.Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
build-args: |
|
||||||
|
GIT_BUILD_HASH=${{ env.GITHUB_SHA }}
|
|
@ -0,0 +1,82 @@
|
||||||
|
name: authentik-ci-web
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint-eslint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: web/package-lock.json
|
||||||
|
- run: |
|
||||||
|
cd web
|
||||||
|
npm install
|
||||||
|
- name: Generate API
|
||||||
|
run: make gen-web
|
||||||
|
- name: Eslint
|
||||||
|
run: |
|
||||||
|
cd web
|
||||||
|
npm run lint
|
||||||
|
lint-prettier:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: web/package-lock.json
|
||||||
|
- run: |
|
||||||
|
cd web
|
||||||
|
npm install
|
||||||
|
- name: Generate API
|
||||||
|
run: make gen-web
|
||||||
|
- name: prettier
|
||||||
|
run: |
|
||||||
|
cd web
|
||||||
|
npm run prettier-check
|
||||||
|
lint-lit-analyse:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: web/package-lock.json
|
||||||
|
- run: |
|
||||||
|
cd web
|
||||||
|
npm install
|
||||||
|
- name: Generate API
|
||||||
|
run: make gen-web
|
||||||
|
- name: prettier
|
||||||
|
run: |
|
||||||
|
cd web
|
||||||
|
npm run lit-analyse
|
||||||
|
build:
|
||||||
|
needs:
|
||||||
|
- lint-eslint
|
||||||
|
- lint-prettier
|
||||||
|
- lint-lit-analyse
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: web/package-lock.json
|
||||||
|
- run: |
|
||||||
|
cd web
|
||||||
|
npm install
|
||||||
|
- name: Generate API
|
||||||
|
run: make gen-web
|
||||||
|
- name: build
|
||||||
|
run: |
|
||||||
|
cd web
|
||||||
|
npm run build
|
|
@ -5,8 +5,9 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
[![](https://img.shields.io/discord/809154715984199690?label=Discord&style=for-the-badge)](https://discord.gg/jg33eMhnj6)
|
[![](https://img.shields.io/discord/809154715984199690?label=Discord&style=for-the-badge)](https://discord.gg/jg33eMhnj6)
|
||||||
[![CI Build status](https://img.shields.io/azure-devops/build/beryjuorg/authentik/6?style=for-the-badge)](https://dev.azure.com/beryjuorg/authentik/_build?definitionId=6)
|
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/goauthentik/authentik/authentik-ci-main?label=core%20build&style=for-the-badge)
|
||||||
[![Tests](https://img.shields.io/azure-devops/tests/beryjuorg/authentik/6?compact_message&style=for-the-badge)](https://dev.azure.com/beryjuorg/authentik/_build?definitionId=6)
|
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/goauthentik/authentik/authentik-ci-web?label=web%20build&style=for-the-badge)
|
||||||
|
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/goauthentik/authentik/authentik-ci-outpost?label=outpost%20build&style=for-the-badge)
|
||||||
[![Code Coverage](https://img.shields.io/codecov/c/gh/goauthentik/authentik?style=for-the-badge)](https://codecov.io/gh/goauthentik/authentik)
|
[![Code Coverage](https://img.shields.io/codecov/c/gh/goauthentik/authentik?style=for-the-badge)](https://codecov.io/gh/goauthentik/authentik)
|
||||||
![Docker pulls](https://img.shields.io/docker/pulls/beryju/authentik.svg?style=for-the-badge)
|
![Docker pulls](https://img.shields.io/docker/pulls/beryju/authentik.svg?style=for-the-badge)
|
||||||
![Latest version](https://img.shields.io/docker/v/beryju/authentik?sort=semver&style=for-the-badge)
|
![Latest version](https://img.shields.io/docker/v/beryju/authentik?sort=semver&style=for-the-badge)
|
||||||
|
|
|
@ -1,120 +0,0 @@
|
||||||
trigger:
|
|
||||||
batch: true
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- master
|
|
||||||
- next
|
|
||||||
- version-*
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- stage: generate
|
|
||||||
jobs:
|
|
||||||
- job: generate_api
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: GoTool@0
|
|
||||||
inputs:
|
|
||||||
version: '1.16.3'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: make gen-outpost
|
|
||||||
- task: PublishPipelineArtifact@1
|
|
||||||
inputs:
|
|
||||||
targetPath: 'api/'
|
|
||||||
artifact: 'go_api_client'
|
|
||||||
publishLocation: 'pipeline'
|
|
||||||
- stage: lint
|
|
||||||
jobs:
|
|
||||||
- job: golint
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: GoTool@0
|
|
||||||
inputs:
|
|
||||||
version: '1.16.3'
|
|
||||||
- task: DownloadPipelineArtifact@2
|
|
||||||
inputs:
|
|
||||||
buildType: 'current'
|
|
||||||
artifactName: 'go_api_client'
|
|
||||||
path: "api/"
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
mkdir -p web/dist
|
|
||||||
mkdir -p website/help
|
|
||||||
touch web/dist/test website/help/test
|
|
||||||
docker run \
|
|
||||||
--rm \
|
|
||||||
-v $(pwd):/app \
|
|
||||||
-w /app \
|
|
||||||
golangci/golangci-lint:v1.39.0 \
|
|
||||||
golangci-lint run -v --timeout 200s
|
|
||||||
- stage: build_docker
|
|
||||||
jobs:
|
|
||||||
- job: proxy_build_docker
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: GoTool@0
|
|
||||||
inputs:
|
|
||||||
version: '1.16.3'
|
|
||||||
- task: Bash@3
|
|
||||||
inputs:
|
|
||||||
targetType: 'inline'
|
|
||||||
script: |
|
|
||||||
python ./scripts/az_do_set_branch.py
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/outpost-proxy'
|
|
||||||
command: 'build'
|
|
||||||
Dockerfile: 'proxy.Dockerfile'
|
|
||||||
buildContext: '$(Build.SourcesDirectory)'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
||||||
gh-$(Build.SourceVersion)
|
|
||||||
arguments: '--build-arg GIT_BUILD_HASH=$(Build.SourceVersion)'
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/outpost-proxy'
|
|
||||||
command: 'push'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
||||||
gh-$(Build.SourceVersion)
|
|
||||||
- job: ldap_build_docker
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: GoTool@0
|
|
||||||
inputs:
|
|
||||||
version: '1.16.3'
|
|
||||||
- task: Bash@3
|
|
||||||
inputs:
|
|
||||||
targetType: 'inline'
|
|
||||||
script: |
|
|
||||||
python ./scripts/az_do_set_branch.py
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/outpost-ldap'
|
|
||||||
command: 'build'
|
|
||||||
Dockerfile: 'ldap.Dockerfile'
|
|
||||||
buildContext: '$(Build.SourcesDirectory)'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
||||||
gh-$(Build.SourceVersion)
|
|
||||||
arguments: '--build-arg GIT_BUILD_HASH=$(Build.SourceVersion)'
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/outpost-ldap'
|
|
||||||
command: 'push'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
||||||
gh-$(Build.SourceVersion)
|
|
|
@ -1,426 +0,0 @@
|
||||||
trigger:
|
|
||||||
batch: true
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- master
|
|
||||||
- next
|
|
||||||
- version-*
|
|
||||||
paths:
|
|
||||||
exclude:
|
|
||||||
- website
|
|
||||||
- outpost
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- repo: self
|
|
||||||
|
|
||||||
variables:
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value: authentik
|
|
||||||
- name: POSTGRES_USER
|
|
||||||
value: authentik
|
|
||||||
- name: POSTGRES_PASSWORD
|
|
||||||
value: "EK-5jnKfjrGRm<77"
|
|
||||||
- group: coverage
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- stage: Lint_and_test
|
|
||||||
jobs:
|
|
||||||
- job: pylint
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run pylint authentik tests lifecycle
|
|
||||||
- job: black
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: pipenv run black --check authentik tests lifecycle
|
|
||||||
- job: isort
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: pipenv run isort --check authentik tests lifecycle
|
|
||||||
- job: bandit
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: pipenv run bandit -r authentik tests lifecycle
|
|
||||||
- job: pyright
|
|
||||||
pool:
|
|
||||||
vmImage: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- task: UseNode@1
|
|
||||||
inputs:
|
|
||||||
version: '12.x'
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: npm install -g pyright@1.1.136
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: pipenv run pyright e2e lifecycle
|
|
||||||
- job: migrations
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run python -m lifecycle.migrate
|
|
||||||
- job: migrations_from_previous_release
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.8'
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Prepare Last tagged release
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
# Copy current, latest config to local
|
|
||||||
cp authentik/lib/default.yml local.env.yml
|
|
||||||
git checkout $(git describe --abbrev=0 --match 'version/*')
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Migrate to last tagged release
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run python -m lifecycle.migrate
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Install current branch
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
set -x
|
|
||||||
git checkout ${{ variables.branchName }}
|
|
||||||
pipenv sync --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Migrate to current branch
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run python -m lifecycle.migrate
|
|
||||||
- job: coverage_unittest
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Run full test suite
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run make test
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
mkdir output-unittest
|
|
||||||
mv unittest.xml output-unittest/unittest.xml
|
|
||||||
mv .coverage output-unittest/coverage
|
|
||||||
- task: PublishPipelineArtifact@1
|
|
||||||
inputs:
|
|
||||||
targetPath: 'output-unittest/'
|
|
||||||
artifact: 'coverage-unittest'
|
|
||||||
publishLocation: 'pipeline'
|
|
||||||
- job: coverage_integration
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Install K3d and prepare
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
wget -q -O - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
|
|
||||||
k3d cluster create
|
|
||||||
k3d kubeconfig write -o ~/.kube/config --overwrite
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Run full test suite
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run make test-integration
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
mkdir output-integration
|
|
||||||
mv unittest.xml output-integration/unittest.xml
|
|
||||||
mv .coverage output-integration/coverage
|
|
||||||
- task: PublishPipelineArtifact@1
|
|
||||||
inputs:
|
|
||||||
targetPath: 'output-integration/'
|
|
||||||
artifact: 'coverage-integration'
|
|
||||||
publishLocation: 'pipeline'
|
|
||||||
- job: coverage_e2e
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '16.x'
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run services
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'scripts/ci.docker-compose.yml'
|
|
||||||
action: 'Run services'
|
|
||||||
buildImages: false
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev --python python3.9
|
|
||||||
- task: DockerCompose@0
|
|
||||||
displayName: Run ChromeDriver
|
|
||||||
inputs:
|
|
||||||
dockerComposeFile: 'tests/e2e/ci.docker-compose.yml'
|
|
||||||
action: 'Run a specific service'
|
|
||||||
serviceName: 'chrome'
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Build static files for e2e
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
cd web
|
|
||||||
npm i
|
|
||||||
npm run build
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Run full test suite
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
pipenv run python -m scripts.generate_ci_config
|
|
||||||
pipenv run make test-e2e
|
|
||||||
- task: CmdLine@2
|
|
||||||
condition: always()
|
|
||||||
displayName: Cleanup
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
docker stop $(docker ps -aq)
|
|
||||||
docker container prune -f
|
|
||||||
- task: CmdLine@2
|
|
||||||
displayName: Prepare unittests and coverage for upload
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
mkdir output-e2e
|
|
||||||
mv unittest.xml output-e2e/unittest.xml
|
|
||||||
mv .coverage output-e2e/coverage
|
|
||||||
- task: PublishPipelineArtifact@1
|
|
||||||
condition: failed()
|
|
||||||
displayName: Upload screenshots if selenium tests fail
|
|
||||||
inputs:
|
|
||||||
targetPath: 'selenium_screenshots/'
|
|
||||||
artifact: 'selenium screenshots'
|
|
||||||
publishLocation: 'pipeline'
|
|
||||||
- task: PublishPipelineArtifact@1
|
|
||||||
inputs:
|
|
||||||
targetPath: 'output-e2e/'
|
|
||||||
artifact: 'coverage-e2e'
|
|
||||||
publishLocation: 'pipeline'
|
|
||||||
- stage: test_combine
|
|
||||||
jobs:
|
|
||||||
- job: test_coverage_combine
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: DownloadPipelineArtifact@2
|
|
||||||
inputs:
|
|
||||||
buildType: 'current'
|
|
||||||
artifactName: 'coverage-e2e'
|
|
||||||
path: "coverage-e2e/"
|
|
||||||
- task: DownloadPipelineArtifact@2
|
|
||||||
inputs:
|
|
||||||
buildType: 'current'
|
|
||||||
artifactName: 'coverage-integration'
|
|
||||||
path: "coverage-integration/"
|
|
||||||
- task: DownloadPipelineArtifact@2
|
|
||||||
inputs:
|
|
||||||
buildType: 'current'
|
|
||||||
artifactName: 'coverage-unittest'
|
|
||||||
path: "coverage-unittest/"
|
|
||||||
- task: UsePythonVersion@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '3.9'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y libxmlsec1-dev pkg-config
|
|
||||||
sudo pip install -U wheel pipenv
|
|
||||||
pipenv install --dev
|
|
||||||
pipenv run coverage combine coverage-e2e/coverage coverage-unittest/coverage coverage-integration/coverage
|
|
||||||
pipenv run coverage xml
|
|
||||||
pipenv run coverage html
|
|
||||||
- task: PublishCodeCoverageResults@1
|
|
||||||
inputs:
|
|
||||||
codeCoverageTool: 'Cobertura'
|
|
||||||
summaryFileLocation: 'coverage.xml'
|
|
||||||
pathToSources: '$(System.DefaultWorkingDirectory)'
|
|
||||||
- task: PublishTestResults@2
|
|
||||||
condition: succeededOrFailed()
|
|
||||||
inputs:
|
|
||||||
testResultsFormat: 'JUnit'
|
|
||||||
testResultsFiles: |
|
|
||||||
coverage-e2e/unittest.xml
|
|
||||||
coverage-integration/unittest.xml
|
|
||||||
coverage-unittest/unittest.xml
|
|
||||||
mergeTestResults: true
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: bash <(curl -s https://codecov.io/bash)
|
|
||||||
- stage: Build
|
|
||||||
jobs:
|
|
||||||
- job: build_server
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: Bash@3
|
|
||||||
inputs:
|
|
||||||
targetType: 'inline'
|
|
||||||
script: |
|
|
||||||
python ./scripts/az_do_set_branch.py
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/server'
|
|
||||||
command: 'build'
|
|
||||||
Dockerfile: 'Dockerfile'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
||||||
arguments: '--build-arg GIT_BUILD_HASH=$(Build.SourceVersion)'
|
|
||||||
- task: Docker@2
|
|
||||||
inputs:
|
|
||||||
containerRegistry: 'beryjuorg-harbor'
|
|
||||||
repository: 'authentik/server'
|
|
||||||
command: 'push'
|
|
||||||
tags: |
|
|
||||||
gh-$(branchName)
|
|
||||||
gh-$(branchName)-$(timestamp)
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
docker-compose -f scripts/ci.docker-compose.yml up -d
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y libxmlsec1-dev pkg-config
|
||||||
|
sudo pip install -U wheel pipenv
|
||||||
|
pipenv install --dev
|
||||||
|
pipenv run python -m scripts.generate_ci_config
|
|
@ -2,12 +2,12 @@
|
||||||
import os
|
import os
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
env_pr_branch = "SYSTEM_PULLREQUEST_SOURCEBRANCH"
|
env_pr_branch = "GITHUB_HEAD_REF"
|
||||||
default_branch = "BUILD_SOURCEBRANCHNAME"
|
default_branch = "GITHUB_REF"
|
||||||
|
|
||||||
branch_name = os.environ[default_branch]
|
branch_name = os.environ[default_branch]
|
||||||
if env_pr_branch in os.environ:
|
if env_pr_branch in os.environ:
|
||||||
branch_name = os.environ[env_pr_branch].replace("/", "-")
|
branch_name = os.environ[env_pr_branch].replace("/", "-")
|
||||||
|
|
||||||
print("##vso[task.setvariable variable=branchName]%s" % branch_name)
|
print("##[set-output name=branchName]%s" % branch_name)
|
||||||
print("##vso[task.setvariable variable=timestamp]%s" % int(time()))
|
print("##[set-output name=timestamp]%s" % int(time()))
|
|
@ -6,4 +6,3 @@ dist
|
||||||
coverage
|
coverage
|
||||||
# don't lint generated code
|
# don't lint generated code
|
||||||
api/
|
api/
|
||||||
azure-pipelines.yml
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
trigger:
|
|
||||||
batch: true
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- master
|
|
||||||
- next
|
|
||||||
- version-*
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- stage: lint
|
|
||||||
jobs:
|
|
||||||
- job: eslint
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '16.x'
|
|
||||||
displayName: 'Install Node.js'
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'install'
|
|
||||||
workingDir: 'web/'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: make gen-web
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'custom'
|
|
||||||
workingDir: 'web/'
|
|
||||||
customCommand: 'run lint'
|
|
||||||
- job: prettier
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '16.x'
|
|
||||||
displayName: 'Install Node.js'
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'install'
|
|
||||||
workingDir: 'web/'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: make gen-web
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'custom'
|
|
||||||
workingDir: 'web/'
|
|
||||||
customCommand: 'run prettier-check'
|
|
||||||
- job: lit_analyse
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '16.x'
|
|
||||||
displayName: 'Install Node.js'
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'install'
|
|
||||||
workingDir: 'web/'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: make gen-web
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'custom'
|
|
||||||
workingDir: 'web/'
|
|
||||||
customCommand: 'run lit-analyse'
|
|
||||||
- stage: build_local
|
|
||||||
jobs:
|
|
||||||
- job: build
|
|
||||||
pool:
|
|
||||||
vmImage: 'ubuntu-latest'
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: '16.x'
|
|
||||||
displayName: 'Install Node.js'
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'install'
|
|
||||||
workingDir: 'web/'
|
|
||||||
- task: CmdLine@2
|
|
||||||
inputs:
|
|
||||||
script: make gen-web
|
|
||||||
- task: Npm@1
|
|
||||||
inputs:
|
|
||||||
command: 'custom'
|
|
||||||
workingDir: 'web/'
|
|
||||||
customCommand: 'run build'
|
|
Reference in New Issue