From 69f4d54baed317a440f48174596efd60afa1a56a Mon Sep 17 00:00:00 2001 From: Jens L Date: Mon, 30 Aug 2021 20:21:15 +0200 Subject: [PATCH] ci: migrate ci to gh actions (#1315) --- .github/workflows/ci-main.yml | 203 +++++++++ .github/workflows/ci-outpost.yml | 64 +++ .github/workflows/ci-web.yml | 82 ++++ .../{release.yml => release-publish.yml} | 0 .../workflows/{tag.yml => release-tag.yml} | 0 README.md | 5 +- azure-pipelines-outpost.yml | 120 ----- azure-pipelines.yml | 426 ------------------ scripts/ci_prepare.sh | 7 + ...z_do_set_branch.py => gh_do_set_branch.py} | 8 +- web/.prettierignore | 1 - web/azure-pipelines.yml | 93 ---- 12 files changed, 363 insertions(+), 646 deletions(-) create mode 100644 .github/workflows/ci-main.yml create mode 100644 .github/workflows/ci-outpost.yml create mode 100644 .github/workflows/ci-web.yml rename .github/workflows/{release.yml => release-publish.yml} (100%) rename .github/workflows/{tag.yml => release-tag.yml} (100%) delete mode 100644 azure-pipelines-outpost.yml delete mode 100644 azure-pipelines.yml create mode 100755 scripts/ci_prepare.sh rename scripts/{az_do_set_branch.py => gh_do_set_branch.py} (50%) delete mode 100644 web/azure-pipelines.yml diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml new file mode 100644 index 000000000..349cc0f45 --- /dev/null +++ b/.github/workflows/ci-main.yml @@ -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 }} diff --git a/.github/workflows/ci-outpost.yml b/.github/workflows/ci-outpost.yml new file mode 100644 index 000000000..e7c72c11a --- /dev/null +++ b/.github/workflows/ci-outpost.yml @@ -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 }} diff --git a/.github/workflows/ci-web.yml b/.github/workflows/ci-web.yml new file mode 100644 index 000000000..ce131b98d --- /dev/null +++ b/.github/workflows/ci-web.yml @@ -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 diff --git a/.github/workflows/release.yml b/.github/workflows/release-publish.yml similarity index 100% rename from .github/workflows/release.yml rename to .github/workflows/release-publish.yml diff --git a/.github/workflows/tag.yml b/.github/workflows/release-tag.yml similarity index 100% rename from .github/workflows/tag.yml rename to .github/workflows/release-tag.yml diff --git a/README.md b/README.md index 87890c783..846441ddb 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,9 @@ --- [![](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) -[![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-main?label=core%20build&style=for-the-badge) +![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) ![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) diff --git a/azure-pipelines-outpost.yml b/azure-pipelines-outpost.yml deleted file mode 100644 index b24aa7e6e..000000000 --- a/azure-pipelines-outpost.yml +++ /dev/null @@ -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) diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index e8b40897b..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -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) diff --git a/scripts/ci_prepare.sh b/scripts/ci_prepare.sh new file mode 100755 index 000000000..3816ab004 --- /dev/null +++ b/scripts/ci_prepare.sh @@ -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 diff --git a/scripts/az_do_set_branch.py b/scripts/gh_do_set_branch.py similarity index 50% rename from scripts/az_do_set_branch.py rename to scripts/gh_do_set_branch.py index 300dbcae7..644abb115 100644 --- a/scripts/az_do_set_branch.py +++ b/scripts/gh_do_set_branch.py @@ -2,12 +2,12 @@ import os from time import time -env_pr_branch = "SYSTEM_PULLREQUEST_SOURCEBRANCH" -default_branch = "BUILD_SOURCEBRANCHNAME" +env_pr_branch = "GITHUB_HEAD_REF" +default_branch = "GITHUB_REF" branch_name = os.environ[default_branch] if env_pr_branch in os.environ: branch_name = os.environ[env_pr_branch].replace("/", "-") -print("##vso[task.setvariable variable=branchName]%s" % branch_name) -print("##vso[task.setvariable variable=timestamp]%s" % int(time())) +print("##[set-output name=branchName]%s" % branch_name) +print("##[set-output name=timestamp]%s" % int(time())) diff --git a/web/.prettierignore b/web/.prettierignore index d4e855680..8310f82be 100644 --- a/web/.prettierignore +++ b/web/.prettierignore @@ -6,4 +6,3 @@ dist coverage # don't lint generated code api/ -azure-pipelines.yml diff --git a/web/azure-pipelines.yml b/web/azure-pipelines.yml deleted file mode 100644 index 27f1f0c47..000000000 --- a/web/azure-pipelines.yml +++ /dev/null @@ -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'