diff --git a/.drone.yml b/.drone.yml index 95d40324133f4..d5deb30668d64 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,7 +1,7 @@ --- kind: pipeline type: docker -name: compliance +name: testing-e2e platform: os: linux @@ -9,14 +9,21 @@ platform: trigger: event: - - push - - tag - pull_request volumes: - name: deps temp: {} +services: + - name: pgsql + pull: default + image: postgres:10 + environment: + POSTGRES_DB: testgitea-e2e + POSTGRES_PASSWORD: postgres + POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' + steps: - name: deps-frontend image: node:18 @@ -24,96 +31,8 @@ steps: commands: - make deps-frontend - - name: deps-backend - image: golang:1.19 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: lint-frontend - image: node:18 - commands: - - make lint-frontend - depends_on: [deps-frontend] - - - name: security-check - image: golang:1.19 - pull: always - commands: - - make security-check - depends_on: [deps-backend] - volumes: - - name: deps - path: /go - - - name: lint-backend - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - pull: always - commands: - - make lint-backend - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata sqlite sqlite_unlock_notify - depends_on: [deps-backend] - volumes: - - name: deps - path: /go - - - name: lint-backend-windows - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - commands: - - make golangci-lint-windows vet - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata sqlite sqlite_unlock_notify - GOOS: windows - GOARCH: amd64 - depends_on: [deps-backend] - volumes: - - name: deps - path: /go - - - name: lint-backend-gogit - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - commands: - - make lint-backend - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata gogit sqlite sqlite_unlock_notify - depends_on: [deps-backend] - volumes: - - name: deps - path: /go - - - name: checks-frontend - image: node:18 - commands: - - make checks-frontend - depends_on: [deps-frontend] - - - name: checks-backend - image: golang:1.19 - commands: - - make checks-backend - depends_on: [deps-backend] - volumes: - - name: deps - path: /go - - - name: test-frontend - image: node:18 - commands: - - make test-frontend - depends_on: [lint-frontend] - - name: generate-frontend - image: golang:1.19 + image: golang:1.18 commands: - make generate-frontend @@ -123,142 +42,8 @@ steps: - make frontend depends_on: [deps-frontend, generate-frontend] - - name: build-backend-no-gcc - image: golang:1.18 # this step is kept as the lowest version of golang that we support - pull: always - environment: - GO111MODULE: on - GOPROXY: https://goproxy.io - commands: - - go build -o gitea_no_gcc # test if build succeeds without the sqlite tag - depends_on: [deps-backend, checks-backend] - volumes: - - name: deps - path: /go - - - name: build-backend-arm64 - image: golang:1.19 - environment: - GO111MODULE: on - GOPROXY: https://goproxy.io - GOOS: linux - GOARCH: arm64 - TAGS: bindata gogit - commands: - - make backend # test cross compile - - rm ./gitea # clean - depends_on: [deps-backend, checks-backend] - volumes: - - name: deps - path: /go - - - name: build-backend-windows - image: golang:1.19 - environment: - GO111MODULE: on - GOPROXY: https://goproxy.io - GOOS: windows - GOARCH: amd64 - TAGS: bindata gogit - commands: - - go build -o gitea_windows - depends_on: [deps-backend, checks-backend] - volumes: - - name: deps - path: /go - - - name: build-backend-386 - image: golang:1.19 - environment: - GO111MODULE: on - GOPROXY: https://goproxy.io - GOOS: linux - GOARCH: 386 - commands: - - go build -o gitea_linux_386 # test if compatible with 32 bit - depends_on: [deps-backend, checks-backend] - volumes: - - name: deps - path: /go - ---- -kind: pipeline -type: docker -name: testing-amd64 - -platform: - os: linux - arch: amd64 - -depends_on: - - compliance - -trigger: - event: - - push - - tag - - pull_request - -volumes: - - name: deps - temp: {} - -services: - - name: mysql - image: mysql:5.7 - pull: always - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: yes - MYSQL_DATABASE: test - - - name: mysql8 - image: mysql:8 - pull: always - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: yes - MYSQL_DATABASE: testgitea - - - name: mssql - image: mcr.microsoft.com/mssql/server:latest - pull: always - environment: - ACCEPT_EULA: Y - MSSQL_PID: Standard - SA_PASSWORD: MwantsaSecurePassword1 - - - name: ldap - image: gitea/test-openldap:latest - pull: always - - - name: elasticsearch - image: elasticsearch:7.5.0 - pull: always - environment: - discovery.type: single-node - - - name: minio - image: minio/minio:RELEASE.2021-03-12T00-00-47Z - pull: always - commands: - - minio server /data - environment: - MINIO_ACCESS_KEY: 123456 - MINIO_SECRET_KEY: 12345678 - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - when: - event: - exclude: - - pull_request - - name: deps-backend - image: golang:1.19 + image: golang:1.18 pull: always commands: - make deps-backend @@ -266,1258 +51,23 @@ steps: - name: deps path: /go - - name: tag-pre-condition - image: drone/git - pull: always - commands: - - git update-ref refs/heads/tag_test ${DRONE_COMMIT_SHA} - - - name: prepare-test-env - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - pull: always + # TODO: We should probably build all dependencies into a test image + - name: test-e2e + image: mcr.microsoft.com/playwright:v1.26.1-jammy commands: + - curl -sLO https://go.dev/dl/go1.18.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz + - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea + - apt-get -qq update && apt-get -qqy install build-essential + - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - - - name: build - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - ./build/test-env-check.sh - - make backend - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata sqlite sqlite_unlock_notify - depends_on: [deps-backend, prepare-test-env] - volumes: - - name: deps - path: /go - - - name: unit-test - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - make unit-test-coverage test-check - environment: - GOPROXY: https://goproxy.io - TAGS: bindata sqlite sqlite_unlock_notify - RACE_ENABLED: true - GITHUB_READ_TOKEN: - from_secret: github_read_token - depends_on: [deps-backend, prepare-test-env] - volumes: - - name: deps - path: /go - - - name: unit-test-gogit - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - make unit-test-coverage test-check - environment: - GOPROXY: https://goproxy.io - TAGS: bindata gogit sqlite sqlite_unlock_notify - RACE_ENABLED: true - GITHUB_READ_TOKEN: - from_secret: github_read_token - depends_on: [deps-backend, prepare-test-env] - volumes: - - name: deps - path: /go - - - name: test-mysql - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - make test-mysql-migration integration-test-coverage - environment: - GOPROXY: https://goproxy.io - TAGS: bindata - RACE_ENABLED: true - TEST_LDAP: 1 - USE_REPO_TEST_DIR: 1 - TEST_INDEXER_CODE_ES_URL: "http://elastic:changeme@elasticsearch:9200" - depends_on: [build] - volumes: - - name: deps - path: /go - - - name: test-mysql8 - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - timeout -s ABRT 50m make test-mysql8-migration test-mysql8 - environment: - GOPROXY: https://goproxy.io - TAGS: bindata - RACE_ENABLED: true - TEST_LDAP: 1 - USE_REPO_TEST_DIR: 1 - depends_on: [build] - volumes: - - name: deps - path: /go - - - name: test-mssql - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - make test-mssql-migration test-mssql - environment: - GOPROXY: https://goproxy.io - TAGS: bindata - RACE_ENABLED: true - TEST_LDAP: 1 - USE_REPO_TEST_DIR: 1 - depends_on: [build] - volumes: - - name: deps - path: /go - - - name: generate-coverage - image: golang:1.19 - commands: - - make coverage + - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: GOPROXY: https://goproxy.io - TAGS: bindata - depends_on: [unit-test, test-mysql] - when: - branch: - - main - event: - - push - - pull_request - - - name: coverage-codecov - image: woodpeckerci/plugin-codecov:next-alpine - pull: always - settings: - files: - - coverage.all - token: - from_secret: codecov_token - depends_on: [generate-coverage] - when: - branch: - - main - event: - - push - - pull_request - ---- -kind: pipeline -name: testing-arm64 - -platform: - os: linux - arch: arm64 - -depends_on: - - compliance - -trigger: - event: - - push - - tag - - pull_request - -volumes: - - name: deps - temp: {} - -services: - - name: pgsql - pull: default - image: postgres:10 - environment: - POSTGRES_DB: test - POSTGRES_PASSWORD: postgres - - - name: ldap - pull: default - image: gitea/test-openldap:latest - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - when: - event: - exclude: - - pull_request - - - name: deps-backend - image: golang:1.19 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: prepare-test-env - image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env - pull: always - commands: - - ./build/test-env-prepare.sh - - - name: build - image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - ./build/test-env-check.sh - - make backend - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not GOSUMDB: sum.golang.org - TAGS: bindata gogit sqlite sqlite_unlock_notify - depends_on: [deps-backend, prepare-test-env] - volumes: - - name: deps - path: /go - - - name: test-sqlite - image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - timeout -s ABRT 50m make test-sqlite-migration test-sqlite - environment: - GOPROXY: https://goproxy.io - TAGS: bindata gogit sqlite sqlite_unlock_notify - RACE_ENABLED: true - TEST_TAGS: gogit sqlite sqlite_unlock_notify - USE_REPO_TEST_DIR: 1 - depends_on: [build] - volumes: - - name: deps - path: /go - - - name: test-pgsql - image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env - user: gitea - commands: - - timeout -s ABRT 50m make test-pgsql-migration test-pgsql - environment: - GOPROXY: https://goproxy.io - TAGS: bindata gogit - RACE_ENABLED: true - TEST_TAGS: gogit - TEST_LDAP: 1 USE_REPO_TEST_DIR: 1 - depends_on: [build] + TEST_PGSQL_DBNAME: 'testgitea-e2e' + DEBIAN_FRONTEND: noninteractive + depends_on: [build-frontend, deps-backend] volumes: - name: deps path: /go - ---- -kind: pipeline -type: docker -name: testing-e2e - -platform: - os: linux - arch: amd64 - -depends_on: - - compliance - -trigger: - event: - - pull_request - -volumes: - - name: deps - temp: {} - -services: - - name: pgsql - pull: default - image: postgres:10 - environment: - POSTGRES_DB: testgitea-e2e - POSTGRES_PASSWORD: postgres - POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' - -steps: - - name: deps-frontend - image: node:18 - pull: always - commands: - - make deps-frontend - - - name: generate-frontend - image: golang:1.18 - commands: - - make generate-frontend - - - name: build-frontend - image: node:18 - commands: - - make frontend - depends_on: [deps-frontend, generate-frontend] - - - name: deps-backend - image: golang:1.18 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - # TODO: We should probably build all dependencies into a test image - - name: test-e2e - image: mcr.microsoft.com/playwright:v1.24.0-focal - commands: - - curl -sLO https://go.dev/dl/go1.18.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz - - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - - apt-get -qq update && apt-get -qqy install build-essential - - export TEST_PGSQL_SCHEMA='' - - ./build/test-env-prepare.sh - - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" - environment: - GOPROXY: https://goproxy.io - GOSUMDB: sum.golang.org - USE_REPO_TEST_DIR: 1 - TEST_PGSQL_DBNAME: 'testgitea-e2e' - DEBIAN_FRONTEND: noninteractive - depends_on: [build-frontend, deps-backend] - volumes: - - name: deps - path: /go - ---- -kind: pipeline -name: update_translations - -platform: - os: linux - arch: arm64 - -trigger: - branch: - - main - event: - - cron - cron: - - update_translations - -steps: - - name: download - image: jonasfranz/crowdin - pull: always - settings: - download: true - export_dir: options/locale/ - ignore_branch: true - project_identifier: gitea - environment: - CROWDIN_KEY: - from_secret: crowdin_key - - - name: update - image: alpine:3.13 - pull: always - commands: - - ./build/update-locales.sh - - - name: push - image: appleboy/drone-git-push - pull: always - settings: - author_email: "teabot@gitea.io" - author_name: GiteaBot - branch: main - commit: true - commit_message: "[skip ci] Updated translations via Crowdin" - remote: "git@github.com:go-gitea/gitea.git" - environment: - GIT_PUSH_SSH_KEY: - from_secret: git_push_ssh_key - - - name: upload_translations - image: jonasfranz/crowdin - pull: always - settings: - files: - locale_en-US.ini: options/locale/locale_en-US.ini - ignore_branch: true - project_identifier: gitea - environment: - CROWDIN_KEY: - from_secret: crowdin_key - ---- -kind: pipeline -type: docker -name: update_gitignore_and_licenses - -platform: - os: linux - arch: arm64 - -trigger: - branch: - - main - event: - - cron - cron: - - update_gitignore_and_licenses - -steps: - - name: download - image: golang:1.19 - pull: always - commands: - - timeout -s ABRT 40m make generate-license generate-gitignore - - - name: push - image: appleboy/drone-git-push - pull: always - settings: - author_email: "teabot@gitea.io" - author_name: GiteaBot - branch: main - commit: true - commit_message: "[skip ci] Updated licenses and gitignores " - remote: "git@github.com:go-gitea/gitea.git" - environment: - GIT_PUSH_SSH_KEY: - from_secret: git_push_ssh_key - ---- -kind: pipeline -type: docker -name: release-latest - -platform: - os: linux - arch: amd64 - -workspace: - base: /source - path: / - -trigger: - branch: - - main - - "release/*" - event: - - push - -depends_on: - - testing-amd64 - - testing-arm64 - -volumes: - - name: deps - temp: {} - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: deps-frontend - image: node:18 - pull: always - commands: - - make deps-frontend - - - name: deps-backend - image: golang:1.19 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: static - image: techknowlogick/xgo:go-1.19.x - pull: always - commands: - # Upgrade to node 18 once https://github.com/techknowlogick/xgo/issues/163 is resolved - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs - - export PATH=$PATH:$GOPATH/bin - - make release - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - TAGS: bindata sqlite sqlite_unlock_notify - DEBIAN_FRONTEND: noninteractive - volumes: - - name: deps - path: /go - - - name: gpg-sign - image: plugins/gpgsign:1 - pull: always - settings: - detach_sign: true - excludes: - - "dist/release/*.sha256" - files: - - "dist/release/*" - environment: - GPGSIGN_KEY: - from_secret: gpgsign_key - GPGSIGN_PASSPHRASE: - from_secret: gpgsign_passphrase - - - name: release-branch - image: woodpeckerci/plugin-s3:latest - pull: always - settings: - acl: public-read - bucket: gitea-artifacts - endpoint: https://ams3.digitaloceanspaces.com - path_style: true - source: "dist/release/*" - strip_prefix: dist/release/ - target: "/gitea/${DRONE_BRANCH##release/v}" - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - when: - branch: - - "release/*" - event: - - push - - - name: release-main - image: woodpeckerci/plugin-s3:latest - settings: - acl: public-read - bucket: gitea-artifacts - endpoint: https://ams3.digitaloceanspaces.com - path_style: true - source: "dist/release/*" - strip_prefix: dist/release/ - target: /gitea/main - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - when: - branch: - - main - event: - - push - ---- -kind: pipeline -name: release-version - -platform: - os: linux - arch: amd64 - -workspace: - base: /source - path: / - -trigger: - event: - - tag - -depends_on: - - testing-arm64 - - testing-amd64 - -volumes: - - name: deps - temp: {} - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: deps-frontend - image: node:18 - pull: always - commands: - - make deps-frontend - - - name: deps-backend - image: golang:1.19 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - - - name: static - image: techknowlogick/xgo:go-1.19.x - pull: always - commands: - # Upgrade to node 18 once https://github.com/techknowlogick/xgo/issues/163 is resolved - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get -qqy install nodejs - - export PATH=$PATH:$GOPATH/bin - - make release - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - TAGS: bindata sqlite sqlite_unlock_notify - DEBIAN_FRONTEND: noninteractive - depends_on: [fetch-tags] - volumes: - - name: deps - path: /go - - - name: gpg-sign - image: plugins/gpgsign:1 - pull: always - settings: - detach_sign: true - excludes: - - "dist/release/*.sha256" - files: - - "dist/release/*" - environment: - GPGSIGN_KEY: - from_secret: gpgsign_key - GPGSIGN_PASSPHRASE: - from_secret: gpgsign_passphrase - depends_on: [static] - - - name: release-tag - image: woodpeckerci/plugin-s3:latest - pull: always - settings: - acl: public-read - bucket: gitea-artifacts - endpoint: https://ams3.digitaloceanspaces.com - path_style: true - source: "dist/release/*" - strip_prefix: dist/release/ - target: "/gitea/${DRONE_TAG##v}" - environment: - AWS_ACCESS_KEY_ID: - from_secret: aws_access_key_id - AWS_SECRET_ACCESS_KEY: - from_secret: aws_secret_access_key - depends_on: [gpg-sign] - - - name: github - image: plugins/github-release:latest - pull: always - settings: - files: - - "dist/release/*" - file_exists: overwrite - environment: - GITHUB_TOKEN: - from_secret: github_token - depends_on: [gpg-sign] - ---- -kind: pipeline -type: docker -name: docs - -platform: - os: linux - arch: arm64 - -depends_on: - - compliance - -trigger: - event: - - push - - tag - - pull_request - -steps: - - name: build-docs - image: plugins/hugo:latest - pull: always - commands: - - apk add --no-cache make bash curl - - cd docs - - make trans-copy clean build - - - name: publish-docs - image: techknowlogick/drone-netlify:latest - pull: always - settings: - path: docs/public/ - site_id: d2260bae-7861-4c02-8646-8f6440b12672 - environment: - NETLIFY_TOKEN: - from_secret: netlify_token - when: - branch: - - main - event: - - push - ---- -kind: pipeline -type: docker -name: docker-linux-amd64-release-version - -platform: - os: linux - arch: amd64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - "refs/tags/**" - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: true - auto_tag_suffix: linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: true - auto_tag_suffix: linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-amd64-release - -platform: - os: linux - arch: amd64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - refs/heads/main - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: false - tags: dev-linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: dev-linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -name: docker-linux-amd64-release-branch - -platform: - os: linux - arch: amd64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - "refs/heads/release/v*" - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-dev-linux-amd64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-dev-linux-amd64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-dry-run - -platform: - os: linux - arch: arm64 - -depends_on: - - compliance - -trigger: - ref: - - "refs/pull/**" - -steps: - - name: dryrun - image: techknowlogick/drone-docker:latest - pull: always - settings: - dry_run: true - repo: gitea/gitea - tags: linux-arm64 - build_args: - - GOPROXY=https://goproxy.io - environment: - PLUGIN_MIRROR: - from_secret: plugin_mirror - when: - event: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-release-version - -platform: - os: linux - arch: arm64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - "refs/tags/**" - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: true - auto_tag_suffix: linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: true - auto_tag_suffix: linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-linux-arm64-release - -platform: - os: linux - arch: arm64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - refs/heads/main - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: false - tags: dev-linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: dev-linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -name: docker-linux-arm64-release-branch - -platform: - os: linux - arch: arm64 - -depends_on: - - testing-amd64 - - testing-arm64 - -trigger: - ref: - - "refs/heads/release/v*" - event: - exclude: - - cron - -steps: - - name: fetch-tags - image: docker:git - pull: always - commands: - - git config --global --add safe.directory /drone/src - - git fetch --tags --force - - - name: publish - image: techknowlogick/drone-docker:latest - pull: always - settings: - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-dev-linux-arm64 - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - - - name: publish-rootless - image: techknowlogick/drone-docker:latest - settings: - dockerfile: Dockerfile.rootless - auto_tag: false - tags: ${DRONE_BRANCH##release/v}-dev-linux-arm64-rootless - repo: gitea/gitea - build_args: - - GOPROXY=https://goproxy.io - password: - from_secret: docker_password - username: - from_secret: docker_username - when: - event: - exclude: - - pull_request - ---- -kind: pipeline -type: docker -name: docker-manifest-version - -platform: - os: linux - arch: amd64 - -steps: - - name: manifest-rootless - image: plugins/manifest - pull: always - settings: - auto_tag: true - ignore_missing: true - spec: docker/manifest.rootless.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - - - name: manifest - image: plugins/manifest - settings: - auto_tag: true - ignore_missing: true - spec: docker/manifest.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - -trigger: - ref: - - "refs/tags/**" - event: - exclude: - - cron - -depends_on: - - docker-linux-amd64-release-version - - docker-linux-arm64-release-version - ---- -kind: pipeline -type: docker -name: docker-manifest - -platform: - os: linux - arch: amd64 - -steps: - - name: manifest-rootless - pull: always - image: plugins/manifest - pull: always - settings: - auto_tag: false - ignore_missing: true - spec: docker/manifest.rootless.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - - - name: manifest - image: plugins/manifest - settings: - auto_tag: false - ignore_missing: true - spec: docker/manifest.tmpl - password: - from_secret: docker_password - username: - from_secret: docker_username - -trigger: - ref: - - refs/heads/main - - "refs/heads/release/v*" - event: - exclude: - - cron - -depends_on: - - docker-linux-amd64-release - - docker-linux-arm64-release - - docker-linux-amd64-release-branch - - docker-linux-arm64-release-branch - ---- -kind: pipeline -type: docker -name: notifications - -platform: - os: linux - arch: arm64 - -clone: - disable: true - -trigger: - branch: - - main - - "release/*" - event: - - push - - tag - status: - - success - - failure - -depends_on: - - testing-amd64 - - testing-arm64 - - release-version - - release-latest - - docker-linux-amd64-release - - docker-linux-arm64-release - - docker-linux-amd64-release-version - - docker-linux-arm64-release-version - - docker-linux-amd64-release-branch - - docker-linux-arm64-release-branch - - docker-manifest - - docker-manifest-version - - docs - -steps: - - name: discord - image: appleboy/drone-discord:1.2.4 - pull: always - settings: - message: "{{#success build.status}} āœ… Build #{{build.number}} of `{{repo.name}}` succeeded.\n\nšŸ“ Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\n\nšŸŒ {{ build.link }} {{else}} āŒ Build #{{build.number}} of `{{repo.name}}` failed.\n\nšŸ“ Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\n\nšŸŒ {{ build.link }} {{/success}}\n" - webhook_id: - from_secret: discord_webhook_id - webhook_token: - from_secret: discord_webhook_token diff --git a/package-lock.json b/package-lock.json index 05d414c9aef9c..c7081f436b3ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@playwright/test": "1.25.2", + "@playwright/test": "1.26.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.23.0", "eslint-plugin-import": "2.26.0", @@ -1378,13 +1378,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.2.tgz", - "integrity": "sha512-6qPznIR4Fw02OMbqXUPMG6bFFg1hDVNEdihKy0t9K0dmRbus1DyP5Q5XFQhGwEHQkLG5hrSfBuu9CW/foqhQHQ==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.26.1.tgz", + "integrity": "sha512-bNxyZASVt2adSZ9gbD7NCydzcb5JaI0OR9hc7s+nmPeH604gwp0zp17NNpwXY4c8nvuBGQQ9oGDx72LE+cUWvw==", "dev": true, "dependencies": { "@types/node": "*", - "playwright-core": "1.25.2" + "playwright-core": "1.26.1" }, "bin": { "playwright": "cli.js" @@ -9118,9 +9118,9 @@ } }, "node_modules/playwright-core": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.2.tgz", - "integrity": "sha512-0yTbUE9lIddkEpLHL3u8PoCL+pWiZtj5A/j3U7YoNjcmKKDGBnCrgHJMzwd2J5vy6l28q4ki3JIuz7McLHhl1A==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.26.1.tgz", + "integrity": "sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA==", "dev": true, "bin": { "playwright": "cli.js" @@ -12762,13 +12762,13 @@ } }, "@playwright/test": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.2.tgz", - "integrity": "sha512-6qPznIR4Fw02OMbqXUPMG6bFFg1hDVNEdihKy0t9K0dmRbus1DyP5Q5XFQhGwEHQkLG5hrSfBuu9CW/foqhQHQ==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.26.1.tgz", + "integrity": "sha512-bNxyZASVt2adSZ9gbD7NCydzcb5JaI0OR9hc7s+nmPeH604gwp0zp17NNpwXY4c8nvuBGQQ9oGDx72LE+cUWvw==", "dev": true, "requires": { "@types/node": "*", - "playwright-core": "1.25.2" + "playwright-core": "1.26.1" } }, "@popperjs/core": { @@ -18660,9 +18660,9 @@ } }, "playwright-core": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.2.tgz", - "integrity": "sha512-0yTbUE9lIddkEpLHL3u8PoCL+pWiZtj5A/j3U7YoNjcmKKDGBnCrgHJMzwd2J5vy6l28q4ki3JIuz7McLHhl1A==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.26.1.tgz", + "integrity": "sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA==", "dev": true }, "pluralize": { diff --git a/package.json b/package.json index c7add76aae2e4..46842483ad5b2 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@playwright/test": "1.25.2", + "@playwright/test": "1.26.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.23.0", "eslint-plugin-import": "2.26.0", diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 6028ff74fc318..781cb205c099a 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -8,18 +8,17 @@ package e2e import ( - "bytes" "context" "fmt" "net/url" "os" "os/exec" "path/filepath" + "strings" "testing" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/graceful" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" @@ -30,8 +29,6 @@ import ( var c *web.Route func TestMain(m *testing.M) { - defer log.Close() - managerCtx, cancel := context.WithCancel(context.Background()) graceful.InitManager(managerCtx) defer cancel() @@ -98,20 +95,29 @@ func TestE2e(t *testing.T) { t.Run(testname, func(t *testing.T) { // Default 2 minute timeout onGiteaRun(t, func(*testing.T, *url.URL) { + fmt.Printf("==== Running test %s, cmd: %s\n", testname, strings.Join(runArgs, " ")) cmd := exec.Command(runArgs[0], runArgs...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Run() + cmd.Env = append(cmd.Env, "DEBUG=pw:api,pw:browser") + + // Currently colored output is conflicting. Using Printf until that is resolved. + /* + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + */ + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stdout + err = cmd.Run() + /* + fmt.Printf("---- STDOUT:\n") + _, _ = io.Copy(os.Stdout, &stdout) + fmt.Printf("---- STDERR:\n") + _, _ = io.Copy(os.Stdout, &stderr) + */ if err != nil { - // Currently colored output is conflicting. Using Printf until that is resolved. - fmt.Printf("%v", stdout.String()) - fmt.Printf("%v", stderr.String()) - log.Fatal("Playwright Failed: %s", err) - } else { - fmt.Printf("%v", stdout.String()) + t.Fatalf("playwright cmd error: %v", err) } }) }) diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index b0aa2b7a65daa..baca1959a732b 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -2,56 +2,14 @@ import {test, expect} from '@playwright/test'; import {login_user, save_visual, load_logged_in_context} from './utils_e2e.js'; +/* test.beforeAll(async ({browser}, workerInfo) => { await login_user(browser, workerInfo, 'user2'); }); +*/ test('Load Homepage', async ({page}) => { - const response = await page.goto('/'); - await expect(response?.status()).toBe(200); // Status OK - await expect(page).toHaveTitle(/^Gitea: Git with a cup of tea\s*$/); - await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); -}); - -test('Test Register Form', async ({page}, workerInfo) => { - const response = await page.goto('/user/sign_up'); - await expect(response?.status()).toBe(200); // Status OK - await page.type('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); - await page.type('input[name=email]', `e2e-test-${workerInfo.workerIndex}@test.com`); - await page.type('input[name=password]', 'test123'); - await page.type('input[name=retype]', 'test123'); - await page.click('form button.ui.green.button:visible'); - // Make sure we routed to the home page. Else login failed. - await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); - await expect(page.locator('.dashboard-navbar span>img.ui.avatar')).toBeVisible(); - await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); - - save_visual(page); -}); - -test('Test Login Form', async ({page}, workerInfo) => { + // await login_user(browser, workerInfo, 'user2'); const response = await page.goto('/user/login'); await expect(response?.status()).toBe(200); // Status OK - - await page.type('input[name=user_name]', `user2`); - await page.type('input[name=password]', `password`); - await page.click('form button.ui.green.button:visible'); - - await page.waitForLoadState('networkidle'); - - await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); - - save_visual(page); -}); - -test('Test Logged In User', async ({browser}, workerInfo) => { - const context = await load_logged_in_context(browser, workerInfo, 'user2'); - const page = await context.newPage(); - - await page.goto('/'); - - // Make sure we routed to the home page. Else login failed. - await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); - - save_visual(page); });