outposts: release binary outposts (#1954)
* outposts/proxy: always embed static assets, still check local Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ci: add initial ci to build outpost as binary Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ci: fix typo, build web Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ci: upload to release on publish, only run linux on ci Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ci: ensure latest go is used Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ci: split e2e tests into two halves Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		
							
								
								
									
										56
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							| @ -176,7 +176,7 @@ jobs: | ||||
|           testspace [integration]unittest.xml --link=codecov | ||||
|       - if: ${{ always() }} | ||||
|         uses: codecov/codecov-action@v2 | ||||
|   test-e2e: | ||||
|   test-e2e-provider: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
| @ -215,12 +215,59 @@ jobs: | ||||
|           npm run build | ||||
|       - name: run e2e | ||||
|         run: | | ||||
|           pipenv run make test-e2e | ||||
|           pipenv run make test-e2e-provider | ||||
|           pipenv run coverage xml | ||||
|       - name: run testspace | ||||
|         if: ${{ always() }} | ||||
|         run: | | ||||
|           testspace [e2e]unittest.xml --link=codecov | ||||
|           testspace [e2e-provider]unittest.xml --link=codecov | ||||
|       - if: ${{ always() }} | ||||
|         uses: codecov/codecov-action@v2 | ||||
|   test-e2e-rest: | ||||
|     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 | ||||
|       - uses: testspace-com/setup-testspace@v1 | ||||
|         with: | ||||
|           domain: ${{github.repository_owner}} | ||||
|       - id: cache-pipenv | ||||
|         uses: actions/cache@v2.1.7 | ||||
|         with: | ||||
|           path: ~/.local/share/virtualenvs | ||||
|           key: ${{ runner.os }}-pipenv-v2-${{ hashFiles('**/Pipfile.lock') }} | ||||
|       - name: prepare | ||||
|         env: | ||||
|           INSTALL: ${{ steps.cache-pipenv.outputs.cache-hit }} | ||||
|         run: | | ||||
|           scripts/ci_prepare.sh | ||||
|           docker-compose -f tests/e2e/docker-compose.yml up -d | ||||
|       - id: cache-web | ||||
|         uses: actions/cache@v2.1.7 | ||||
|         with: | ||||
|           path: web/dist | ||||
|           key: ${{ runner.os }}-web-${{ hashFiles('web/package-lock.json', 'web/**') }} | ||||
|       - name: prepare web ui | ||||
|         if: steps.cache-web.outputs.cache-hit != 'true' | ||||
|         run: | | ||||
|           cd web | ||||
|           npm i | ||||
|           npm run build | ||||
|       - name: run e2e | ||||
|         run: | | ||||
|           pipenv run make test-e2e-rest | ||||
|           pipenv run coverage xml | ||||
|       - name: run testspace | ||||
|         if: ${{ always() }} | ||||
|         run: | | ||||
|           testspace [e2e-rest]unittest.xml --link=codecov | ||||
|       - if: ${{ always() }} | ||||
|         uses: codecov/codecov-action@v2 | ||||
|   ci-core-mark: | ||||
| @ -230,7 +277,8 @@ jobs: | ||||
|       - test-migrations-from-stable | ||||
|       - test-unittest | ||||
|       - test-integration | ||||
|       - test-e2e | ||||
|       - test-e2e-rest | ||||
|       - test-e2e-provider | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - run: echo mark | ||||
|  | ||||
							
								
								
									
										40
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							| @ -17,7 +17,7 @@ jobs: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: '^1.16.3' | ||||
|           go-version: "^1.17" | ||||
|       - name: Run linter | ||||
|         run: | | ||||
|           # Create folder structure for go embeds | ||||
| @ -80,3 +80,41 @@ jobs: | ||||
|           build-args: | | ||||
|             GIT_BUILD_HASH=${{ steps.ev.outputs.sha }} | ||||
|           platforms: ${{ matrix.arch }} | ||||
|   build-outpost-binary: | ||||
|     timeout-minutes: 120 | ||||
|     needs: | ||||
|       - ci-outpost-mark | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         type: | ||||
|           - proxy | ||||
|           - ldap | ||||
|         goos: [linux] | ||||
|         goarch: [amd64, arm64] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: "^1.17" | ||||
|       - uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: '16' | ||||
|           cache: 'npm' | ||||
|           cache-dependency-path: web/package-lock.json | ||||
|       - name: Build web | ||||
|         run: | | ||||
|           cd web | ||||
|           npm install | ||||
|           npm run build-proxy | ||||
|       - name: Build outpost | ||||
|         run: | | ||||
|           set -x | ||||
|           export GOOS=${{ matrix.goos }} | ||||
|           export GOARCH=${{ matrix.goarch }} | ||||
|           go build -tags=outpost_static_embed -v -o ./authentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} ./cmd/${{ matrix.type }} | ||||
|       - uses: actions/upload-artifact@v2 | ||||
|         with: | ||||
|           name: authentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} | ||||
|           path: ./authentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} | ||||
|  | ||||
							
								
								
									
										49
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
								
							| @ -57,7 +57,7 @@ jobs: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: "^1.15" | ||||
|           go-version: "^1.17" | ||||
|       - name: Set up QEMU | ||||
|         uses: docker/setup-qemu-action@v1.2.0 | ||||
|       - name: Set up Docker Buildx | ||||
| @ -93,10 +93,57 @@ jobs: | ||||
|           docker pull ghcr.io/goauthentik/${{ matrix.type }}:latest | ||||
|           docker tag ghcr.io/goauthentik/${{ matrix.type }}:latest ghcr.io/goauthentik/${{ matrix.type }}:stable | ||||
|           docker push ghcr.io/goauthentik/${{ matrix.type }}:stable | ||||
|   build-outpost-binary: | ||||
|     timeout-minutes: 120 | ||||
|     needs: | ||||
|       - ci-outpost-mark | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         type: | ||||
|           - proxy | ||||
|           - ldap | ||||
|         goos: [linux, windows, darwin] | ||||
|         goarch: ["386", amd64, arm64] | ||||
|         exclude: | ||||
|           - goarch: "386" | ||||
|             goos: darwin | ||||
|           - goarch: arm64 | ||||
|             goos: windows | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|       - uses: actions/setup-go@v2 | ||||
|         with: | ||||
|           go-version: "^1.17" | ||||
|       - uses: actions/setup-node@v2 | ||||
|         with: | ||||
|           node-version: '16' | ||||
|           cache: 'npm' | ||||
|           cache-dependency-path: web/package-lock.json | ||||
|       - name: Build web | ||||
|         run: | | ||||
|           cd web | ||||
|           npm install | ||||
|           npm run build-proxy | ||||
|       - name: Build outpost | ||||
|         run: | | ||||
|           set -x | ||||
|           export GOOS=${{ matrix.goos }} | ||||
|           export GOARCH=${{ matrix.goarch }} | ||||
|           go build -tags=outpost_static_embed -v -o ./authentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} ./cmd/${{ matrix.type }} | ||||
|       - name: Upload binaries to release | ||||
|         uses: svenstaro/upload-release-action@v2 | ||||
|         with: | ||||
|           repo_token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           file: ./authentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} | ||||
|           asset_name: hentik-outpost-${{ matrix.type }}_${{ matrix.goos }}_${{ matrix.goarch }} | ||||
|           tag: ${{ github.ref }} | ||||
|   test-release: | ||||
|     needs: | ||||
|       - build-server | ||||
|       - build-outpost | ||||
|       - build-outpost-binary | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|  | ||||
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							| @ -9,8 +9,11 @@ all: lint-fix lint test gen web | ||||
| test-integration: | ||||
| 	coverage run manage.py test tests/integration | ||||
|  | ||||
| test-e2e: | ||||
| 	coverage run manage.py test tests/e2e | ||||
| test-e2e-provider: | ||||
| 	coverage run manage.py test tests/e2e/test_provider* | ||||
|  | ||||
| test-e2e-rest: | ||||
| 	coverage run manage.py test tests/e2e/test_flows* tests/e2e/test_source* | ||||
|  | ||||
| test: | ||||
| 	coverage run manage.py test authentik | ||||
|  | ||||
| @ -10,6 +10,7 @@ import ( | ||||
| 	"github.com/prometheus/client_golang/prometheus" | ||||
| 	"goauthentik.io/internal/outpost/proxyv2/metrics" | ||||
| 	"goauthentik.io/internal/utils/web" | ||||
| 	staticWeb "goauthentik.io/web" | ||||
| ) | ||||
|  | ||||
| func (ps *ProxyServer) HandlePing(rw http.ResponseWriter, r *http.Request) { | ||||
| @ -28,9 +29,8 @@ func (ps *ProxyServer) HandlePing(rw http.ResponseWriter, r *http.Request) { | ||||
| } | ||||
|  | ||||
| func (ps *ProxyServer) HandleStatic(rw http.ResponseWriter, r *http.Request) { | ||||
| 	staticFs := http.FileServer(http.Dir("./web/dist/")) | ||||
| 	before := time.Now() | ||||
| 	web.DisableIndex(http.StripPrefix("/akprox/static/dist", staticFs)).ServeHTTP(rw, r) | ||||
| 	web.DisableIndex(http.StripPrefix("/akprox/static/dist", staticWeb.StaticHandler)).ServeHTTP(rw, r) | ||||
| 	after := time.Since(before) | ||||
| 	metrics.Requests.With(prometheus.Labels{ | ||||
| 		"outpost_name": ps.akAPI.Outpost.Name, | ||||
|  | ||||
| @ -1,9 +1,14 @@ | ||||
| package web | ||||
|  | ||||
| import _ "embed" | ||||
| import ( | ||||
| 	_ "embed" | ||||
| 	"net/http" | ||||
| ) | ||||
|  | ||||
| //go:embed robots.txt | ||||
| var RobotsTxt []byte | ||||
|  | ||||
| //go:embed security.txt | ||||
| var SecurityTxt []byte | ||||
|  | ||||
| var StaticHandler = http.FileServer(http.Dir("./web/dist/")) | ||||
|  | ||||
							
								
								
									
										19
									
								
								web/static_outpost.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								web/static_outpost.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| //go:build outpost_static_embed | ||||
| // +build outpost_static_embed | ||||
|  | ||||
| package web | ||||
|  | ||||
| import ( | ||||
| 	"embed" | ||||
| 	"net/http" | ||||
| ) | ||||
|  | ||||
| //go:embed dist/* | ||||
| var StaticDist embed.FS | ||||
|  | ||||
| //go:embed authentik | ||||
| var StaticAuthentik embed.FS | ||||
|  | ||||
| func init() { | ||||
| 	StaticHandler = http.FileServer(http.FS(StaticDist)) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L