mirror of
https://github.com/harness/drone.git
synced 2025-07-10 20:49:02 +00:00
Compare commits
15 Commits
v2.25.1-de
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
ddedb5c25c | ||
|
df5e03dd95 | ||
|
46a0d1339e | ||
|
6b533ad67b | ||
|
ea0bac5164 | ||
|
890a22bc13 | ||
|
9e5972604c | ||
|
106b784779 | ||
|
6c0a9044f5 | ||
|
f32714255c | ||
|
6bc3aa81fc | ||
|
0d97cd198f | ||
|
7a0d4c3cfd | ||
|
e0aa6cb81a | ||
|
7ab205375f |
@ -1,2 +0,0 @@
|
||||
*
|
||||
!release/*
|
107
.drone.yml
107
.drone.yml
@ -1,107 +0,0 @@
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: linux-amd64
|
||||
|
||||
platform:
|
||||
arch: amd64
|
||||
os: linux
|
||||
|
||||
steps:
|
||||
- name: test
|
||||
image: golang:1.14.15
|
||||
commands:
|
||||
- go test -race ./...
|
||||
- go build -o /dev/null github.com/drone/drone/cmd/drone-server
|
||||
- go build -o /dev/null -tags "oss nolimit" github.com/drone/drone/cmd/drone-server
|
||||
|
||||
- name: build
|
||||
image: golang:1.14.15
|
||||
commands:
|
||||
- sh scripts/build.sh
|
||||
environment:
|
||||
GOARCH: amd64
|
||||
GOOS: linux
|
||||
|
||||
- name: publish
|
||||
image: plugins/docker:18
|
||||
settings:
|
||||
auto_tag: true
|
||||
auto_tag_suffix: linux-amd64
|
||||
dockerfile: docker/Dockerfile.server.linux.amd64
|
||||
repo: drone/drone
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: vm
|
||||
name: linux-arm64
|
||||
|
||||
pool:
|
||||
use: ubuntu_arm64
|
||||
|
||||
platform:
|
||||
arch: arm64
|
||||
os: linux
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: golang:1.14.15
|
||||
commands:
|
||||
- sh scripts/build.sh
|
||||
environment:
|
||||
GOARCH: arm64
|
||||
GOOS: linux
|
||||
|
||||
- name: publish
|
||||
image: plugins/docker:18
|
||||
settings:
|
||||
auto_tag: true
|
||||
auto_tag_suffix: linux-arm64
|
||||
dockerfile: docker/Dockerfile.server.linux.arm64
|
||||
repo: drone/drone
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
|
||||
depends_on:
|
||||
- linux-amd64
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: manifest
|
||||
|
||||
steps:
|
||||
- name: publish
|
||||
image: plugins/manifest:1.2
|
||||
settings:
|
||||
auto_tag: true
|
||||
ignore_missing: true
|
||||
spec: docker/manifest.server.tmpl
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
|
||||
depends_on:
|
||||
- linux-arm64
|
||||
|
3
.github/code_of_conduct.md
vendored
3
.github/code_of_conduct.md
vendored
@ -1,3 +0,0 @@
|
||||
## Drone Community Code of Conduct
|
||||
|
||||
Drone follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).
|
35
.github/contributing.md
vendored
35
.github/contributing.md
vendored
@ -1,35 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved.
|
||||
|
||||
Following these guidelines helps to communicate that you respect the time of the developers maintaining this project. In return, they should reciprocate that respect in addressing your issue or assessing patches and features.
|
||||
|
||||
## Support Requests
|
||||
|
||||
The [mailing list](https://discourse.drone.io) is the preferred channel for support requests. Please do not use the issue tracker for personal support requests.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of this project. It is up to you to make a strong case to convince the developers of the merits of this feature. Please provide as much detail and context as possible.
|
||||
|
||||
## Compatibility
|
||||
|
||||
This project maintains a strong commitment to backward compatibility. Changing the runtime behavior or configuration in a manner that breaks the public contract should always be avoided.
|
||||
|
||||
## Dependencies
|
||||
|
||||
This project does not attempt to track the latest version for each dependency. Please only apply the minimal dependency changes required for your patch to work. _If it ain't broke, don't fix it._
|
||||
|
||||
## Pull Requests
|
||||
|
||||
Please discuss on our [mailing list](https://discourse.drone.io) before embarking on any significant pull request, otherwise you risk spending time working on something the developers might not want to merge into the project.
|
||||
|
||||
Pull requests should remain focused in scope and avoid containing unrelated commits. For example, a pull request could add a feature, fix a bug, or format code; but not a mixture.
|
||||
|
||||
When you are ready to submit a pull request you can use the below checklist to to increase the likelihood of your pull request being accepted in a timely manner:
|
||||
|
||||
- Run the unit tests.
|
||||
- Format the code.
|
||||
- Include entry in [CHANGELOG.md](../CHANGELOG.md) that describes the change.
|
||||
- Include unit tests when you contribute a new feature.
|
||||
- Include unit tests when you contribute a bug fix to prevent regressions.
|
16
.github/issue_template.md
vendored
16
.github/issue_template.md
vendored
@ -1,16 +0,0 @@
|
||||
<!-- PLEASE READ BEFORE DELETING
|
||||
|
||||
Bugs or Issues? Please create a new topic in our Discourse forum.
|
||||
We are migrating all Drone repositories to Discourse for bug tracking.
|
||||
New GitHub issues may be automatically deleted.
|
||||
|
||||
https://community.harness.io/
|
||||
https://community.harness.io/c/bugs/17
|
||||
https://community.harness.io/c/ideas/11
|
||||
|
||||
Failing Builds? Please do not use GitHub issues for generic support
|
||||
questions. Instead please use Stack Overflow:
|
||||
|
||||
http://stackoverflow.com/questions/tagged/drone.io
|
||||
|
||||
-->
|
27
.github/pull_request_template.md
vendored
27
.github/pull_request_template.md
vendored
@ -1,27 +0,0 @@
|
||||
## Commit Checklist
|
||||
|
||||
Thank you for creating a pull request! To help us review / merge this can you make sure that your PR adheres as much as possible to the following.
|
||||
|
||||
### The Basics
|
||||
|
||||
- Commit is a single logical unit of work, only use multiple commits if doing different tasks
|
||||
- Commit does not include commented out code or unneeded files
|
||||
- rebase of main branch
|
||||
|
||||
### The Content
|
||||
|
||||
- Must include testing for bug or feature
|
||||
- Must include appropriate documentation changes if it is introducing a new feature or changing existing functionality
|
||||
- Must pass existing test suites
|
||||
|
||||
### The Commit Message
|
||||
|
||||
- Short meaningful description (ex: remove deprecated steps)
|
||||
- Uses the imperative, present tense: "change", not "changed" or "changes"
|
||||
- Includes motivation for the change, and contrasts its implementation with the previous behavior
|
||||
|
||||
### The Pull Request
|
||||
|
||||
- What is the reason for this change
|
||||
- Example usage of the failure for a bug, or configuration and expected output for a feature
|
||||
- Steps to test the change
|
7
.github/readme.md
vendored
7
.github/readme.md
vendored
@ -1,7 +0,0 @@
|
||||
Gitness is an Open Source developer platform with Source Control management, Continuous Integration and Continuous Delivery. Gitness is the successor to Drone and will be merging with the Drone project over the coming months.
|
||||
|
||||
Documentation and Other Links:
|
||||
|
||||
* Setup Documentation [docs.gitness.com/getting-started](https://docs.gitness.com/)
|
||||
* Usage Documentation for repositories [docs.drone.io/getting-started](https://docs.gitness.com/repositories/overview)
|
||||
* Join the [Gitness Slack Channel](https://join.slack.com/t/harnesscommunity/shared_invite/zt-y4hdqh7p-RVuEQyIl5Hcx4Ck8VCvzBw)
|
36
.github/security.md
vendored
36
.github/security.md
vendored
@ -1,36 +0,0 @@
|
||||
# Security Policies and Procedures
|
||||
|
||||
This document outlines security procedures and general policies for this project.
|
||||
|
||||
* [Reporting a Bug](#reporting-a-bug)
|
||||
* [Disclosure Policy](#disclosure-policy)
|
||||
* [Comments on this Policy](#comments-on-this-policy)
|
||||
|
||||
## Reporting a Bug
|
||||
|
||||
Report security bugs by emailing the lead maintainer at security@drone.io.
|
||||
|
||||
The lead maintainer will acknowledge your email within 48 hours, and will send a
|
||||
more detailed response within 48 hours indicating the next steps in handling
|
||||
your report. After the initial reply to your report, the security team will
|
||||
endeavor to keep you informed of the progress towards a fix and full
|
||||
announcement, and may ask for additional information or guidance.
|
||||
|
||||
Report security bugs in third-party software to the person or team maintaining
|
||||
that software.
|
||||
|
||||
## Disclosure Policy
|
||||
|
||||
When the security team receives a security bug report, they will assign it to a
|
||||
primary handler. This person will coordinate the fix and release process,
|
||||
involving the following steps:
|
||||
|
||||
* Confirm the problem and determine the affected versions.
|
||||
* Audit code to find any potential similar problems.
|
||||
* Prepare fixes for all releases still under maintenance. These fixes will be
|
||||
released as fast as possible to DockerHub.
|
||||
|
||||
## Comments on this Policy
|
||||
|
||||
If you have suggestions on how this process could be improved please submit a
|
||||
pull request.
|
@ -1,3 +0,0 @@
|
||||
since-tag=v2.0.4
|
||||
issues=false
|
||||
|
13
.gitignore
vendored
13
.gitignore
vendored
@ -1,13 +0,0 @@
|
||||
.vscode
|
||||
__debug_bin
|
||||
*.sqlite
|
||||
*.txt
|
||||
*.out
|
||||
*.key
|
||||
.env
|
||||
.env.*
|
||||
release/
|
||||
scripts/*.go
|
||||
docker/**/data
|
||||
TODO*
|
||||
.idea
|
11
BUILDING
11
BUILDING
@ -1,11 +0,0 @@
|
||||
1. Clone the repository
|
||||
2. Install go 1.11 or later with Go modules enabled
|
||||
3. Install binaries to $GOPATH/bin
|
||||
|
||||
go install github.com/drone/drone/cmd/drone-server
|
||||
|
||||
4. Start the server at localhost:8080
|
||||
|
||||
export DRONE_GITHUB_CLIENT_ID=...
|
||||
export DRONE_GITHUB_CLIENT_SECRET=...
|
||||
drone-server
|
11
BUILDING_OSS
11
BUILDING_OSS
@ -1,11 +0,0 @@
|
||||
1. Clone the repository
|
||||
2. Install go 1.11 or later with Go modules enabled
|
||||
3. Install binaries to $GOPATH/bin
|
||||
|
||||
go install -tags "oss nolimit" github.com/drone/drone/cmd/drone-server
|
||||
|
||||
4. Start the server at localhost:8080
|
||||
|
||||
export DRONE_GITHUB_CLIENT_ID=...
|
||||
export DRONE_GITHUB_CLIENT_SECRET=...
|
||||
drone-server
|
797
CHANGELOG.md
797
CHANGELOG.md
@ -1,797 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## [v2.20.0](https://github.com/harness/drone/tree/v2.20.0) (2023-08-21)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.19.0...v2.20.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- + sync gitea redirecturl config from gitee for customize login redire… [\#3319](https://github.com/harness/drone/pull/3319) ([fireinice](https://github.com/fireinice))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(CI-8780\) set approved stages to waiting, if they have stage depende… [\#3355](https://github.com/harness/drone/pull/3355) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.19.0](https://github.com/harness/drone/tree/v2.19.0) (2023-08-15)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/scheduler_experiment...v2.19.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- Support arbitrary action value from parameter in query string [\#3341](https://github.com/harness/drone/pull/3341) ([filippopisano](https://github.com/filippopisano))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- bump drone-ui to 2.11.5 [\#3350](https://github.com/harness/drone/pull/3350) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump drone-ui to 2.11.4 [\#3349](https://github.com/harness/drone/pull/3349) ([d1wilko](https://github.com/d1wilko))
|
||||
- \(fix\) prevent scheduler deadlock [\#3344](https://github.com/harness/drone/pull/3344) ([tphoney](https://github.com/tphoney))
|
||||
- bump drone-ui to 2.11.3 [\#3337](https://github.com/harness/drone/pull/3337) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) prep for v2.19.0 [\#3352](https://github.com/harness/drone/pull/3352) ([tphoney](https://github.com/tphoney))
|
||||
- remove repetitive words [\#3342](https://github.com/harness/drone/pull/3342) ([cuishuang](https://github.com/cuishuang))
|
||||
- Revert "fix scheduler queue deadlock" [\#3331](https://github.com/harness/drone/pull/3331) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [scheduler_experiment](https://github.com/harness/drone/tree/scheduler_experiment) (2023-07-05)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.18.0...scheduler_experiment)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fix scheduler queue deadlock [\#3330](https://github.com/harness/drone/pull/3330) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.18.0](https://github.com/harness/drone/tree/v2.18.0) (2023-07-04)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.17.0...v2.18.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- support custom pipeline message [\#3294](https://github.com/harness/drone/pull/3294) ([zc2638](https://github.com/zc2638))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- bump drone-ui to 2.11.2 [\#3327](https://github.com/harness/drone/pull/3327) ([d1wilko](https://github.com/d1wilko))
|
||||
- Fix comment errors [\#3302](https://github.com/harness/drone/pull/3302) ([weidongkl](https://github.com/weidongkl))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- v2.18.0 release prep [\#3328](https://github.com/harness/drone/pull/3328) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.17.0](https://github.com/harness/drone/tree/v2.17.0) (2023-04-25)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.16.0...v2.17.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- Add `authtype` to logging middleware [\#3310](https://github.com/harness/drone/pull/3310) ([colinhoglund](https://github.com/colinhoglund))
|
||||
- Add config for the buffer [\#3308](https://github.com/harness/drone/pull/3308) ([TheJokersThief](https://github.com/TheJokersThief))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- store/card: fix dropped error [\#3300](https://github.com/harness/drone/pull/3300) ([alrs](https://github.com/alrs))
|
||||
- bump drone-ui to 2.9.1 [\#3298](https://github.com/harness/drone/pull/3298) ([d1wilko](https://github.com/d1wilko))
|
||||
- Starlark: Update `go.starlark.net` dependency [\#3284](https://github.com/harness/drone/pull/3284) ([dsotirakis](https://github.com/dsotirakis))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep for v2.17.0 [\#3316](https://github.com/harness/drone/pull/3316) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- bump drone-ui to 2.11.1 [\#3315](https://github.com/harness/drone/pull/3315) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump drone-ui to 2.11.0 [\#3313](https://github.com/harness/drone/pull/3313) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump drone-ui to 2.10.0 [\#3311](https://github.com/harness/drone/pull/3311) ([d1wilko](https://github.com/d1wilko))
|
||||
- \(maint\) move to use the arm64 pool [\#3296](https://github.com/harness/drone/pull/3296) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.16.0](https://github.com/harness/drone/tree/v2.16.0) (2022-12-15)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.15.0...v2.16.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- Make Starlark file size limit configurable [\#3291](https://github.com/harness/drone/pull/3291) ([andrii-kasparevych](https://github.com/andrii-kasparevych))
|
||||
- Enhance status check label for promotions [\#3263](https://github.com/harness/drone/pull/3263) ([michelangelomo](https://github.com/michelangelomo))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(bugfix\) bump go-scm to v1.28.0 [\#3290](https://github.com/harness/drone/pull/3290) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) 2.16.0 release prep [\#3295](https://github.com/harness/drone/pull/3295) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.15.0](https://github.com/harness/drone/tree/v2.15.0) (2022-10-28)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.14.0...v2.15.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui version [\#3279](https://github.com/harness/drone/pull/3279) ([d1wilko](https://github.com/d1wilko))
|
||||
- Add endpoint for allowing admins to force rotate a user's token [\#3272](https://github.com/harness/drone/pull/3272) ([ShiftedMr](https://github.com/ShiftedMr))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep v2.15.0 [\#3281](https://github.com/harness/drone/pull/3281) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.14.0](https://github.com/harness/drone/tree/v2.14.0) (2022-10-18)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.13.0...v2.14.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- \(DRON-418\) send webhook and set status for failed builds [\#3266](https://github.com/harness/drone/pull/3266) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- v2.14.0 release prep [\#3275](https://github.com/harness/drone/pull/3275) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.13.0](https://github.com/harness/drone/tree/v2.13.0) (2022-09-21)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.12.1...v2.13.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- feat: update drone-yaml module [\#3249](https://github.com/harness/drone/pull/3249) ([jimsheldon](https://github.com/jimsheldon))
|
||||
- support time zone [\#3241](https://github.com/harness/drone/pull/3241) ([zc2638](https://github.com/zc2638))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- update discourse.drone.io to community.harness.io [\#3261](https://github.com/harness/drone/pull/3261) ([kit101](https://github.com/kit101))
|
||||
- \(DRON-392\) cascade deletes on purge [\#3243](https://github.com/harness/drone/pull/3243) ([tphoney](https://github.com/tphoney))
|
||||
- Template converter, don't skip .yaml extension. [\#3242](https://github.com/harness/drone/pull/3242) ([staffanselander](https://github.com/staffanselander))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- v2.13.0 release prep [\#3268](https://github.com/harness/drone/pull/3268) ([tphoney](https://github.com/tphoney))
|
||||
- \(maint\) disable arm builds [\#3262](https://github.com/harness/drone/pull/3262) ([tphoney](https://github.com/tphoney))
|
||||
- Update links to discourse in issue template [\#3233](https://github.com/harness/drone/pull/3233) ([alikhil](https://github.com/alikhil))
|
||||
|
||||
## [v2.12.1](https://github.com/harness/drone/tree/v2.12.1) (2022-06-15)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.12.0...v2.12.1)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(bug\) - fix original template scripts & remove amend scripts [\#3229](https://github.com/harness/drone/pull/3229) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- \(bug\) - remove unique index on template name [\#3226](https://github.com/harness/drone/pull/3226) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Added OAuth2 token refresher for Gitlab [\#3215](https://github.com/harness/drone/pull/3215) ([EndymionWight](https://github.com/EndymionWight))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep for v2.12.1 [\#3232](https://github.com/harness/drone/pull/3232) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- \(maint\) fix starlark test on windows [\#3230](https://github.com/harness/drone/pull/3230) ([tphoney](https://github.com/tphoney))
|
||||
- \(maint\) fix unit tests so they pass on windows [\#3228](https://github.com/harness/drone/pull/3228) ([tphoney](https://github.com/tphoney))
|
||||
- Update Readme to Fix Typo [\#3223](https://github.com/harness/drone/pull/3223) ([hrittikhere](https://github.com/hrittikhere))
|
||||
- \(bug\) add unit test for comments in template file [\#3221](https://github.com/harness/drone/pull/3221) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Bump scm version to v1.24.0 [\#3219](https://github.com/harness/drone/pull/3219) ([kit101](https://github.com/kit101))
|
||||
|
||||
## [v2.12.0](https://github.com/harness/drone/tree/v2.12.0) (2022-05-16)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.11.1...v2.12.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump SCM version to v1.21.1 [\#3204](https://github.com/harness/drone/pull/3204) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump ui version [\#3202](https://github.com/harness/drone/pull/3202) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(fix\) update drone ui to 2.8.2 [\#3211](https://github.com/harness/drone/pull/3211) ([tphoney](https://github.com/tphoney))
|
||||
- \(dron-267\) correctly set parent for promotion retry [\#3210](https://github.com/harness/drone/pull/3210) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep v2.12.0 [\#3214](https://github.com/harness/drone/pull/3214) ([tphoney](https://github.com/tphoney))
|
||||
- fixing URL [\#3208](https://github.com/harness/drone/pull/3208) ([dnielsen](https://github.com/dnielsen))
|
||||
- update community information with updated links [\#3199](https://github.com/harness/drone/pull/3199) ([mrsantons](https://github.com/mrsantons))
|
||||
|
||||
## [v2.11.1](https://github.com/harness/drone/tree/v2.11.1) (2022-03-15)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.11.0...v2.11.1)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- ignore nil repos in list and add better debugging [\#3196](https://github.com/harness/drone/pull/3196) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) release prep for 2.11.1 [\#3197](https://github.com/harness/drone/pull/3197) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.11.0](https://github.com/harness/drone/tree/v2.11.0) (2022-03-08)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.10.0...v2.11.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump UI and SCM versions [\#3193](https://github.com/harness/drone/pull/3193) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) release prep for 2.11.0 [\#3194](https://github.com/harness/drone/pull/3194) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.10.0](https://github.com/harness/drone/tree/v2.10.0) (2022-03-03)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.9.1...v2.10.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump UI version to v2.7.0 [\#3190](https://github.com/harness/drone/pull/3190) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump UI version to v2.6.2 [\#3188](https://github.com/harness/drone/pull/3188) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) release prep for 2.10.0 [\#3191](https://github.com/harness/drone/pull/3191) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.9.1](https://github.com/harness/drone/tree/v2.9.1) (2022-01-27)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.9.0...v2.9.1)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- bump ui version 2.6.1 [\#3185](https://github.com/harness/drone/pull/3185) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) release prep for 2.9.1 [\#3186](https://github.com/harness/drone/pull/3186) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.9.0](https://github.com/harness/drone/tree/v2.9.0) (2022-01-26)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.8.0...v2.9.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui to v2.6.0 [\#3183](https://github.com/harness/drone/pull/3183) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep for v2.9.0 [\#3184](https://github.com/harness/drone/pull/3184) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.8.0](https://github.com/harness/drone/tree/v2.8.0) (2022-01-11)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.7.3...v2.8.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump UI to v2.5.0 [\#3180](https://github.com/harness/drone/pull/3180) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- \(feat\) ignore archive repos on sync [\#3178](https://github.com/harness/drone/pull/3178) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Datadog add the tag of 'remote:gitee' [\#3174](https://github.com/harness/drone/pull/3174) ([kit101](https://github.com/kit101))
|
||||
- Add tag filter when call build list endpoint [\#3173](https://github.com/harness/drone/pull/3173) ([michelangelomo](https://github.com/michelangelomo))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(maint\) add warning around typo for stage\_id in step struct [\#3179](https://github.com/harness/drone/pull/3179) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep v2.8.0 [\#3181](https://github.com/harness/drone/pull/3181) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.7.3](https://github.com/harness/drone/tree/v2.7.3) (2021-12-30)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.7.2...v2.7.3)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- bump go-scm to v1.16.3 [\#3175](https://github.com/harness/drone/pull/3175) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep v2.7.3 [\#3176](https://github.com/harness/drone/pull/3176) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.7.2](https://github.com/harness/drone/tree/v2.7.2) (2021-12-19)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.7.1...v2.7.2)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump go-scm to v1.16.2 [\#3169](https://github.com/harness/drone/pull/3169) ([kit101](https://github.com/kit101))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fixbug gitee provide refresher [\#3168](https://github.com/harness/drone/pull/3168) ([kit101](https://github.com/kit101))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep 2.7.2 [\#3172](https://github.com/harness/drone/pull/3172) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.7.1](https://github.com/harness/drone/tree/v2.7.1) (2021-12-17)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.7.0...v2.7.1)
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fixes issue with redirects on double slashes in url [\#3170](https://github.com/harness/drone/pull/3170) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep v2.7.1 [\#3171](https://github.com/harness/drone/pull/3171) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.7.0](https://github.com/harness/drone/tree/v2.7.0) (2021-12-15)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.6.0...v2.7.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump UI to v2.4.1 [\#3167](https://github.com/harness/drone/pull/3167) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(DRON-157\) use deploy string in deployment [\#3165](https://github.com/harness/drone/pull/3165) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release v2.7.0 [\#3166](https://github.com/harness/drone/pull/3166) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.6.0](https://github.com/harness/drone/tree/v2.6.0) (2021-11-30)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.5.0...v2.6.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- Feat: implemented gitee client [\#3156](https://github.com/harness/drone/pull/3156) ([kit101](https://github.com/kit101))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep for v2.6.0 [\#3163](https://github.com/harness/drone/pull/3163) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.5.0](https://github.com/harness/drone/tree/v2.5.0) (2021-11-17)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.4.0...v2.5.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui to v2.4.0 [\#3160](https://github.com/harness/drone/pull/3160) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- add new endpoint for uploading cards [\#3159](https://github.com/harness/drone/pull/3159) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- refactor create / find / delete end points for cards [\#3158](https://github.com/harness/drone/pull/3158) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- bump ui to v2.3.1 [\#3155](https://github.com/harness/drone/pull/3155) ([d1wilko](https://github.com/d1wilko))
|
||||
- provide ability to create/read/store card data in drone server [\#3149](https://github.com/harness/drone/pull/3149) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- \(DRON-124\) adding new status endpoint [\#3143](https://github.com/harness/drone/pull/3143) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fix a typo in readme [\#3150](https://github.com/harness/drone/pull/3150) ([nothatDinger](https://github.com/nothatDinger))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release prep for v2.5.0 [\#3161](https://github.com/harness/drone/pull/3161) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
## [v2.4.0](https://github.com/harness/drone/tree/v2.4.0) (2021-09-23)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.3.1...v2.4.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui version to v2.3.0 [\#3146](https://github.com/harness/drone/pull/3146) ([d1wilko](https://github.com/d1wilko))
|
||||
- verify if the application is buildable [\#3144](https://github.com/harness/drone/pull/3144) ([marko-gacesa](https://github.com/marko-gacesa))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fixes build issue with bitbucket cloud [\#3147](https://github.com/harness/drone/pull/3147) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Fix stepLimit param in Starlark and Template OSS code [\#3141](https://github.com/harness/drone/pull/3141) ([phil-davis](https://github.com/phil-davis))
|
||||
- fix a broken link in readme [\#3140](https://github.com/harness/drone/pull/3140) ([empire](https://github.com/empire))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\)-release 2.4.0 [\#3148](https://github.com/harness/drone/pull/3148) ([d1wilko](https://github.com/d1wilko))
|
||||
- Allow jsonnet imports in pipeline configuration [\#3105](https://github.com/harness/drone/pull/3105) ([hhamalai](https://github.com/hhamalai))
|
||||
|
||||
## [v2.3.1](https://github.com/harness/drone/tree/v2.3.1) (2021-09-09)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.3.0...v2.3.1)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui to v2.2.1 - https://github.com/drone/drone-ui/blob/main/CHANGELOG.md [\#3138](https://github.com/harness/drone/pull/3138) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\)-release 2.3.1 [\#3139](https://github.com/harness/drone/pull/3139) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.3.0](https://github.com/harness/drone/tree/v2.3.0) (2021-09-09)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.2.0...v2.3.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui to v2.2.0 - https://github.com/drone/drone-ui/blob/main/CHANGELOG.md [\#3137](https://github.com/harness/drone/pull/3137) ([d1wilko](https://github.com/d1wilko))
|
||||
- Make starlark step limit configurable [\#3134](https://github.com/harness/drone/pull/3134) ([phil-davis](https://github.com/phil-davis))
|
||||
- \(feat\) drone h/a: wrapped scheduler's signal func with redis mutex [\#3130](https://github.com/harness/drone/pull/3130) ([marko-gacesa](https://github.com/marko-gacesa))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- \(fix\) trim http/s prefixes from config hostnames [\#3136](https://github.com/harness/drone/pull/3136) ([tphoney](https://github.com/tphoney))
|
||||
- \(fix\) remove unused jwt-go library [\#3129](https://github.com/harness/drone/pull/3129) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.2.0](https://github.com/harness/drone/tree/v2.2.0) (2021-09-01)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.1.0...v2.2.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- \(maint\) ui version v2.1.0 - https://github.com/drone/drone-ui/blob/main/CHANGELOG.md [\#3132](https://github.com/harness/drone/pull/3132) ([d1wilko](https://github.com/d1wilko))
|
||||
- Ability to cancel running builds, if a new commit is pushed [\#3126](https://github.com/harness/drone/pull/3126) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fix templating reg expression to match if .drone.yml contains --- characters [\#3131](https://github.com/harness/drone/pull/3131) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- add check on template extension type - throw error if invalid [\#3128](https://github.com/harness/drone/pull/3128) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\)-release 2.2.0 [\#3133](https://github.com/harness/drone/pull/3133) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Rename files with camelCase name to use snake\_case convention [\#3127](https://github.com/harness/drone/pull/3127) ([marko-gacesa](https://github.com/marko-gacesa))
|
||||
- event-stream supports timeout [\#3125](https://github.com/harness/drone/pull/3125) ([zc2638](https://github.com/zc2638))
|
||||
- \(maint\) Readme update Add Contributor Section [\#3111](https://github.com/harness/drone/pull/3111) ([mrsantons](https://github.com/mrsantons))
|
||||
|
||||
## [v2.1.0](https://github.com/harness/drone/tree/v2.1.0) (2021-08-24)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.0.6...v2.1.0)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- \(maint\) ui version v2.0.1. - https://github.com/drone/drone-ui/blob/main/CHANGELOG.md [\#3123](https://github.com/harness/drone/pull/3123) ([d1wilko](https://github.com/d1wilko))
|
||||
- add support for yaml templates [\#3120](https://github.com/harness/drone/pull/3120) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- Update error message to forbidden if user membership doesn't exist on repo [\#3122](https://github.com/harness/drone/pull/3122) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- update create template path to have namespace, instead of inside the payload [\#3121](https://github.com/harness/drone/pull/3121) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- update dependency drone/go-scm to 1.15.2 to fix gitea build problem [\#3118](https://github.com/harness/drone/pull/3118) ([sesky4](https://github.com/sesky4))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) v2.1.0 release prep [\#3124](https://github.com/harness/drone/pull/3124) ([d1wilko](https://github.com/d1wilko))
|
||||
|
||||
## [v2.0.6](https://github.com/harness/drone/tree/v2.0.6) (2021-08-17)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.0.5...v2.0.6)
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- \(maint\) v2.0.6 release prep [\#3119](https://github.com/harness/drone/pull/3119) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
## [v2.0.5](https://github.com/harness/drone/tree/v2.0.5) (2021-08-17)
|
||||
|
||||
[Full Changelog](https://github.com/harness/drone/compare/v2.0.4...v2.0.5)
|
||||
|
||||
**Implemented enhancements:**
|
||||
|
||||
- bump ui version [\#3115](https://github.com/harness/drone/pull/3115) ([d1wilko](https://github.com/d1wilko))
|
||||
- bump ui version [\#3114](https://github.com/harness/drone/pull/3114) ([d1wilko](https://github.com/d1wilko))
|
||||
- Add support for nested data objects within templates [\#3110](https://github.com/harness/drone/pull/3110) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- \(feat\) redis implementation for pub-sub, log streaming and canceller [\#3108](https://github.com/harness/drone/pull/3108) ([marko-gacesa](https://github.com/marko-gacesa))
|
||||
|
||||
**Fixed bugs:**
|
||||
|
||||
- fix issue where map changes order therefore test randomly fails [\#3112](https://github.com/harness/drone/pull/3112) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
|
||||
**Merged pull requests:**
|
||||
|
||||
- release 2.0.5 [\#3117](https://github.com/harness/drone/pull/3117) ([eoinmcafee00](https://github.com/eoinmcafee00))
|
||||
- Update pull\_request\_template.md [\#3107](https://github.com/harness/drone/pull/3107) ([tphoney](https://github.com/tphoney))
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## Unreleased
|
||||
|
||||
## [2.0.4]
|
||||
### Fixed
|
||||
- DRON-97 remove use of request animation frame to prevent high CPU on tab refocus events.
|
||||
|
||||
## [2.0.3]
|
||||
### Fixed
|
||||
- DONE-91 handle extra slashes in url. [#3009](https://github.com/drone/drone/pull/3099).
|
||||
|
||||
## [2.0.2]
|
||||
### Added
|
||||
- Merge remote-tracking branch 'origin/master'
|
||||
- prevent repository list short circuit in UI
|
||||
- remove deprecated steps from building file [#3097](https://github.com/drone/drone/pull/3097)
|
||||
- adding depends_on, image and detached fields to step [#3072](https://github.com/drone/drone/pull/3072)
|
||||
- Add ctx.build.debug boolean [#3082](https://github.com/drone/drone/pull/3082)
|
||||
- Bump github.com/google/go-jsonnet to v0.17.0 [#3084](https://github.com/drone/drone/pull/3084)
|
||||
- bump go-scm v1.15.1 [#3096](https://github.com/drone/drone/pull/3096)
|
||||
- bitbucket server build issue [#3092](https://github.com/drone/drone/pull/3092)
|
||||
- update scm version [#3091](https://github.com/drone/drone/pull/3091)
|
||||
- Limit graceful shutdown duration [#3093](https://github.com/drone/drone/pull/3093)
|
||||
- bump user interface
|
||||
- bump ui version
|
||||
- ignore skip directive for promote and rollback events
|
||||
- new feature: maximum open DB connections is configurable[#3089](https://github.com/drone/drone/pull/3089)
|
||||
- jsonnet additional parameters [#3087](https://github.com/drone/drone/pull/3087)
|
||||
- hide login button if user already authenticated
|
||||
- new feature: configuration templates [#3081](https://github.com/drone/drone/pull/3081)
|
||||
|
||||
### Fixed
|
||||
- various typos [#3088](https://github.com/drone/drone/pull/3088)
|
||||
- handle error properly if template doesn't exist [#3095](https://github.com/drone/drone/pull/3093)
|
||||
- oss build issue [#3086](https://github.com/drone/drone/pull/3086)
|
||||
- graceful shutdown [#3083](https://github.com/drone/drone/pull/3083)
|
||||
|
||||
## [2.0.1]
|
||||
### Added
|
||||
- support for configuring the internal yaml cache size.
|
||||
|
||||
## [2.0.0]
|
||||
### Added
|
||||
- feature flags for mixed-mode database encryption.
|
||||
|
||||
### Changed
|
||||
- user-interface re-design
|
||||
|
||||
### Breaking
|
||||
- removed deprecated kubernetes integration in favor of official kubernetes runner.
|
||||
- removed deprecated nomad integration in favor of official nomad runner.
|
||||
|
||||
## [1.10.1]
|
||||
### Added
|
||||
- support for repository-level concurrency limits.
|
||||
- support for gitlab and github internal visibility on initial sync.
|
||||
|
||||
### Fixed
|
||||
- create machine user with a custom API token.
|
||||
|
||||
## [1.10.0]
|
||||
### Added
|
||||
- support for starlark scripts in core.
|
||||
- support for executing pipelines in debug mode.
|
||||
|
||||
## [1.9.2]
|
||||
### Added
|
||||
- update go-scm dependency to fix
|
||||
|
||||
## [1.9.1]
|
||||
### Added
|
||||
- support for increasing the http request timeout for extensions. [#2998](https://github.com/drone/drone/pull/2998).
|
||||
- support for skipping a pipeline if the validation extension returns an ErrSkip.
|
||||
- support for blocking a pipeline if the validation extension returns an ErrBlock.
|
||||
|
||||
### Fixed
|
||||
- rollback endpoint should be available to users with write permission.
|
||||
- retrying a build should re-use custom build parameters from parent build.
|
||||
|
||||
## [1.9.0] - 2020-07-12
|
||||
### Added
|
||||
- ui support for deployment list and summary.
|
||||
- ui support for promoting and rolling back builds.
|
||||
- feature flag to use static secret when signing webhooks, from @chiraggadasc.
|
||||
|
||||
### Fixed
|
||||
- ui branch list improperly capped.
|
||||
|
||||
### Changed
|
||||
- upgrade drone/envsubst dependency
|
||||
- upgrade drone/go-scm dependency
|
||||
|
||||
## [1.8.1] - 2020-06-23
|
||||
### Fixed
|
||||
- support for gitea api pagination, repository sync hanging.
|
||||
|
||||
## [1.8.0] - 2020-06-10
|
||||
### Added
|
||||
- re-assigned repository ownership when deactivating a user.
|
||||
- re-assigned repository ownership when deleting a user.
|
||||
- de-activate a repository when deleting a user if re-assignment fails.
|
||||
- de-activate a repository when deactivating a user if re-assignment fails.
|
||||
- routine to cleanup builds stuck in a pending state.
|
||||
- routine to cleanup builds stuck in a running state.
|
||||
- private mode setting requires authentication to view public repositories.
|
||||
|
||||
### Fixed
|
||||
- canceling a build emits a sql.ErrNoRows error.
|
||||
- custom token is ignored when creating a user account via the API.
|
||||
- machine accounts with sufficient permissions can create builds via the API.
|
||||
|
||||
### Changed
|
||||
- upgraded Go toolchain to version 1.14.4.
|
||||
|
||||
## [1.7.0] - 2020-03-27
|
||||
### Added
|
||||
- endpoint to display the latest build by branch. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to display the latest build by pull request. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to display the latest build by environment. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete a branch from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete a pull request from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete an environment from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- page to view the latest build per branch.
|
||||
|
||||
### Fixed
|
||||
- sync routine not executing asynchronously, being cancelled by http context.
|
||||
- sync routine should ignore gitlab subrepositories
|
||||
- convert deploy events in 0.8 yaml to promote events.
|
||||
- do not execute cron job for disabled repositories. [#2931](https://github.com/drone/drone/issues/2931).
|
||||
- remove trailing slash from gitea url to prevent oauth2 token refresh errors, by [@cmj0121](https://github.com/cmj0121). [#2920](https://github.com/drone/drone/issues/2920).
|
||||
- disable font ligatures in build log output. [drone/drone-ui#322](https://github.com/drone/drone-ui/pull/322).
|
||||
- missing am/pm in timestamps
|
||||
|
||||
## [1.6.5] - 2020-01-29
|
||||
### Changed
|
||||
- update version of go-scm
|
||||
- update alpine version in docker images
|
||||
- use ticker for cron jobs for more accurate timing
|
||||
|
||||
## [1.6.4] - 2019-12-30
|
||||
### Added
|
||||
- optionally enable pprof endpoints for profiling, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.3] - 2019-12-10
|
||||
### Fixed
|
||||
- disable caching generated yaml files by commit sha, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Added
|
||||
- support for bitbucket skipverify, by [@toni-moreno](https://github.com/toni-moreno).
|
||||
- support for gitea skipverify, by [@toni-moreno](https://github.com/toni-moreno).
|
||||
|
||||
## [1.6.2] - 2019-11-08
|
||||
### Added
|
||||
- support for loading license contents from env, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- regression not converting legacy pipeline when using new runners, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.1] - 2019-10-17
|
||||
### Added
|
||||
- updated autocert library in support of acme v2 protocol, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- fixed nil pointer when manually adding user from api, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.0] - 2019-10-04
|
||||
### Added
|
||||
- added nsswitch to docker images
|
||||
- option to auto-cancel pending builds when newer build enqueued, by [@bradrydzewski](https://github.com/bradrydzewski). [#1980](https://github.com/drone/drone/issues/1980).
|
||||
- endpoint to list all repositories in the database, by [@bradrydzewski](https://github.com/bradrydzewski). [#2785](https://github.com/drone/drone/issues/2785).
|
||||
|
||||
### Fixed
|
||||
- improve sync to handle duplicate repository names with different unique identifiers, by [@bradrydzewski](https://github.com/bradrydzewski). [#2658](https://github.com/drone/drone/issues/2658). _You can revert to the previous sync logic with DRONE_DATABASE_LEGACY_BATCH=true_.
|
||||
|
||||
## [1.5.1] - 2019-09-30
|
||||
### Added
|
||||
- allow organization admins access to organization secret endpoints, by [@bradrydzewski](https://github.com/bradrydzewski). [#2838](https://github.com/drone/drone/issues/2838).
|
||||
|
||||
### Fixed
|
||||
- fix invalid deep links in UI for github enterprise, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ensure correct casing when manually adding user, by [@bradrydzewski](https://github.com/bradrydzewski). [#2766](https://github.com/drone/drone/issues/2766).
|
||||
|
||||
## [1.5.0] - 2019-09-28
|
||||
### Added
|
||||
- endpoint to execute a cron pipeline on-demand, by [@bradrydzewski](https://github.com/bradrydzewski). [#2781](https://github.com/drone/drone/issues/2781).
|
||||
- endpoint to list builds by branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#1495](https://github.com/drone/drone/issues/1495).
|
||||
- ignore skip comments when cron event, by [@bradrydzewski](https://github.com/bradrydzewski). [#2835](https://github.com/drone/drone/issues/2835).
|
||||
- support for admission extensions, by [@bradrydzewski](https://github.com/bradrydzewski). [#2043](https://github.com/drone/drone/issues/2043).
|
||||
- endpoint to provide link to git resources, by [@bradrydzewski](https://github.com/bradrydzewski). [#2843](https://github.com/drone/drone/issues/2843).
|
||||
- improve bitbucket status display text on new pull request screen, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- missing cron job name in user interface, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- log lines not properly wrapping in user interface, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
[#309](https://github.com/drone/drone-ui/issues/309).
|
||||
|
||||
### Breaking
|
||||
- the server now runs in multi-machine mode by default. In order to run the server in single-machine mode (agents disabled) you must set DRONE_AGENTS_DISABLED=true.
|
||||
|
||||
## [1.4.0] - 2019-09-12
|
||||
### Added
|
||||
- upgrade to Go 1.13 to resolve arm segfault, by [@KN4CK3R](https://github.com/KN4CK3R). [#2823](https://github.com/drone/drone/issues/2823).
|
||||
- configure default visibility, by [@JordanSussman](https://github.com/JordanSussman). [#2824](https://github.com/drone/drone/issues/2824).
|
||||
- configure default trusted flag, by [@vyckou](https://github.com/vyckou).
|
||||
- support for validation plugins, by [@bradrydzewski](https://github.com/bradrydzewski). [#2266](https://github.com/drone/drone/issues/2266).
|
||||
- support for conversion plugins, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- support for cron event type, by [@bradrydzewski](https://github.com/bradrydzewski). [#2705](https://github.com/drone/drone/issues/2705).
|
||||
- support for rollback event, by [@bradrydzewski](https://github.com/bradrydzewski). [#2695](https://github.com/drone/drone/issues/2695).
|
||||
- support for lets encrypt email, by [@bradrydzewski](https://github.com/bradrydzewski). [#2505](https://github.com/drone/drone/issues/2505).
|
||||
|
||||
### Removed
|
||||
- Support for basic auth as an option for Gitea, by [@techknowlogick](https://giteahub.com/techknowlogick). [#2721](https://github.com/drone/drone/issues/2721)
|
||||
|
||||
### Fixed
|
||||
- copy cron job name when restarting a cron job, by [@bradrydzewski](https://github.com/bradrydzewski). [#2760](https://github.com/drone/drone/issues/2760).
|
||||
|
||||
## [1.3.1] - 2019-08-26
|
||||
### Added
|
||||
- support for the GitHub deployment status API, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.3.0] - 2019-08-20
|
||||
### Added
|
||||
- support for storing logs in Azure Cloud Storage, by [@Lucretius](https://github.com/Lucretius). [#2788](https://github.com/drone/drone/pull/2788)
|
||||
- support for windows server 1903, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- button to view the full log file, by [@dramich](https://github.com/dramich). [drone/drone-ui#287](https://github.com/drone/drone-ui/pull/287).
|
||||
|
||||
### Fixed
|
||||
- read gogs sha from webhook, by [@marcotuna](https://github.com/marcotuna).
|
||||
- create bind volume on host if not exists, by [@bradrydzewski](https://github.com/bradrydzewski). [#2725](https://github.com/drone/drone/issues/2725).
|
||||
- preserve whitespace in build logs, by [@geek1011](https://github.com/geek1011). [drone/drone-ui#294](https://github.com/drone/drone-ui/pull/294).
|
||||
- enable log file download on firefox, by [@bobmanary](https://github.com/bobmanary). [drone/drone-ui#303](https://github.com/drone/drone-ui/pull/303)
|
||||
|
||||
### Security
|
||||
- upgraded to Go 1.12.9 due to CVE-2019-9512 and CVE-2019-9514
|
||||
|
||||
## [1.2.3] - 2019-07-30
|
||||
### Added
|
||||
|
||||
- disable github status for cron jobs
|
||||
- support for action in conditionals, by [@bradrydzewski](https://github.com/bradrydzewski). [#2685](https://github.com/drone/drone/issues/2685).
|
||||
|
||||
### Fixed
|
||||
|
||||
- improve cancel logic for dangling stages, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- improve error when kubernetes malforms the port configuration, by [@bradrydzewski](https://github.com/bradrydzewski). [#2742](https://github.com/drone/drone/issues/2742).
|
||||
- copy parameters from parent build when promoting, by [@bradrydzewski](https://github.com/bradrydzewski). [#2748](https://github.com/drone/drone/issues/2748).
|
||||
|
||||
## [1.2.2] - 2019-07-29
|
||||
### Added
|
||||
|
||||
- support for legacy environment variables
|
||||
- support for legacy workspace based on repository name
|
||||
- support for github deployment hooks
|
||||
- provide base sha for github pull requests
|
||||
- option to filter webhooks by event and type
|
||||
- upgrade drone-yaml to v1.2.2
|
||||
- upgrade drone-runtime to v1.0.7
|
||||
|
||||
### Fixed
|
||||
|
||||
- error when manually creating an empty user, by [@bradrydzewski](https://github.com/bradrydzewski). [#2738](https://github.com/drone/drone/issues/2738).
|
||||
|
||||
## [1.2.1] - 2019-06-11
|
||||
### Added
|
||||
|
||||
- support for legacy tokens to ease upgrade path, by [@bradrydzewski](https://github.com/bradrydzewski). [#2713](https://github.com/drone/drone/issues/2713).
|
||||
- include repository name and id in batch update error message, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix inconsistent base64 encoding and decoding of encrypted secrets, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-yaml to version 1.1.2 for improved 0.8 to 1.0 yaml marshal escaping.
|
||||
- update drone-yaml to version 1.1.3 for improved 0.8 to 1.0 workspace conversion.
|
||||
|
||||
## [1.2.0] - 2019-05-30
|
||||
### Added
|
||||
|
||||
- endpoint to trigger new build for default branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- endpoint to trigger new build for branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- endpoint to trigger new build for branch and sha, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- enable optional prometheus metrics guest access, by [@janberktold](https://github.com/janberktold)
|
||||
- fallback to database when logs not found in s3, by [@bradrydzewski](https://github.com/bradrydzewski). [#2689](https://github.com/drone/drone/issues/2689).
|
||||
- support for custom stage definitions and runners, by [@bradrydzewski](https://github.com/bradrydzewski). [#2680](https://github.com/drone/drone/issues/2680).
|
||||
- update drone-yaml to version 1.1.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- retrieve latest build by branch, by [@tboerger](https://github.com/tboerger).
|
||||
- copy the fork value when restarting a build, by [@bradrydzewski](https://github.com/bradrydzewski). [#2708](https://github.com/drone/drone/issues/2708).
|
||||
- make healthz available without redirect, by [@bradrydzewski](https://github.com/bradrydzewski). [#2706](https://github.com/drone/drone/issues/2706).
|
||||
|
||||
## [1.1.0] - 2019-04-23
|
||||
### Added
|
||||
|
||||
- specify a user for the pipeline step, by [@bradrydzewski](https://github.com/bradrydzewski). [#2651](https://github.com/drone/drone/issues/2651).
|
||||
- support for Gitea oauth2, by [@techknowlogick](https://github.com/techknowlogick). [#2622](https://github.com/drone/drone/pull/2622).
|
||||
- ping the docker daemon before starting the agent, by [@bradrydzewski](https://github.com/bradrydzewski). [#2495](https://github.com/drone/drone/issues/2495).
|
||||
- support for Cron job name in Yaml trigger block, by [@bradrydzewski](https://github.com/bradrydzewski). [#2628](https://github.com/drone/drone/issues/2628).
|
||||
- support for Cron job name in Yaml when block, by [@bradrydzewski](https://github.com/bradrydzewski). [#2628](https://github.com/drone/drone/issues/2628).
|
||||
- sqlite username column changed to case-insensitive, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- endpoint to purge repository from database, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- support for per-organization secrets, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- include system metadata in global webhooks, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ability to customize cookie secure flag, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-yaml from version 1.0.6 to 1.0.8.
|
||||
- update drone-runtime from version 1.0.4 to 1.0.6.
|
||||
- update go-scm from version 1.0.3 to 1.0.4.
|
||||
|
||||
### Fixed
|
||||
|
||||
- fixed error in mysql table creation syntax, from [@xuyang2](https://github.com/xuyang2). [#2677](https://github.com/drone/drone/pull/2677).
|
||||
- fixed stuck builds when upstream dependency is skipped, from [@bradrydzewski](https://github.com/bradrydzewski). [#2634](https://github.com/drone/drone/issues/2634).
|
||||
- fixed issue running steps with dependencies on failure, from [@bradrydzewski](https://github.com/bradrydzewski). [#2667](https://github.com/drone/drone/issues/2667).
|
||||
|
||||
## [1.0.1] - 2019-04-10
|
||||
### Added
|
||||
|
||||
- pass stage environment variables to pipeline steps, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update go-scm to version 1.3.0, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-runtime to version to 1.0.4, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ping docker daemon before agent starts to ensure connectivity, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
|
||||
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
|
326
HISTORY.md
326
HISTORY.md
@ -1,326 +0,0 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## Unreleased
|
||||
|
||||
## [2.0.4]
|
||||
### Fixed
|
||||
- DRON-97 remove use of request animation frame to prevent high CPU on tab refocus events.
|
||||
|
||||
## [2.0.3]
|
||||
### Fixed
|
||||
- DONE-91 handle extra slashes in url. [#3009](https://github.com/drone/drone/pull/3099).
|
||||
|
||||
## [2.0.2]
|
||||
### Added
|
||||
- Merge remote-tracking branch 'origin/master'
|
||||
- prevent repository list short circuit in UI
|
||||
- remove deprecated steps from building file [#3097](https://github.com/drone/drone/pull/3097)
|
||||
- adding depends_on, image and detached fields to step [#3072](https://github.com/drone/drone/pull/3072)
|
||||
- Add ctx.build.debug boolean [#3082](https://github.com/drone/drone/pull/3082)
|
||||
- Bump github.com/google/go-jsonnet to v0.17.0 [#3084](https://github.com/drone/drone/pull/3084)
|
||||
- bump go-scm v1.15.1 [#3096](https://github.com/drone/drone/pull/3096)
|
||||
- bitbucket server build issue [#3092](https://github.com/drone/drone/pull/3092)
|
||||
- update scm version [#3091](https://github.com/drone/drone/pull/3091)
|
||||
- Limit graceful shutdown duration [#3093](https://github.com/drone/drone/pull/3093)
|
||||
- bump user interface
|
||||
- bump ui version
|
||||
- ignore skip directive for promote and rollback events
|
||||
- new feature: maximum open DB connections is configurable[#3089](https://github.com/drone/drone/pull/3089)
|
||||
- jsonnet additional parameters [#3087](https://github.com/drone/drone/pull/3087)
|
||||
- hide login button if user already authenticated
|
||||
- new feature: configuration templates [#3081](https://github.com/drone/drone/pull/3081)
|
||||
|
||||
### Fixed
|
||||
- various typos [#3088](https://github.com/drone/drone/pull/3088)
|
||||
- handle error properly if template doesn't exist [#3095](https://github.com/drone/drone/pull/3093)
|
||||
- oss build issue [#3086](https://github.com/drone/drone/pull/3086)
|
||||
- graceful shutdown [#3083](https://github.com/drone/drone/pull/3083)
|
||||
|
||||
## [2.0.1]
|
||||
### Added
|
||||
- support for configuring the internal yaml cache size.
|
||||
|
||||
## [2.0.0]
|
||||
### Added
|
||||
- feature flags for mixed-mode database encryption.
|
||||
|
||||
### Changed
|
||||
- user-interface re-design
|
||||
|
||||
### Breaking
|
||||
- removed deprecated kubernetes integration in favor of official kubernetes runner.
|
||||
- removed deprecated nomad integration in favor of official nomad runner.
|
||||
|
||||
## [1.10.1]
|
||||
### Added
|
||||
- support for repository-level concurrency limits.
|
||||
- support for gitlab and github internal visibility on initial sync.
|
||||
|
||||
### Fixed
|
||||
- create machine user with a custom API token.
|
||||
|
||||
## [1.10.0]
|
||||
### Added
|
||||
- support for starlark scripts in core.
|
||||
- support for executing pipelines in debug mode.
|
||||
|
||||
## [1.9.2]
|
||||
### Added
|
||||
- update go-scm dependency to fix
|
||||
|
||||
## [1.9.1]
|
||||
### Added
|
||||
- support for increasing the http request timeout for extensions. [#2998](https://github.com/drone/drone/pull/2998).
|
||||
- support for skipping a pipeline if the validation extension returns an ErrSkip.
|
||||
- support for blocking a pipeline if the validation extension returns an ErrBlock.
|
||||
|
||||
### Fixed
|
||||
- rollback endpoint should be available to users with write permission.
|
||||
- retrying a build should re-use custom build parameters from parent build.
|
||||
|
||||
## [1.9.0] - 2020-07-12
|
||||
### Added
|
||||
- ui support for deployment list and summary.
|
||||
- ui support for promoting and rolling back builds.
|
||||
- feature flag to use static secret when signing webhooks, from @chiraggadasc.
|
||||
|
||||
### Fixed
|
||||
- ui branch list improperly capped.
|
||||
|
||||
### Changed
|
||||
- upgrade drone/envsubst dependency
|
||||
- upgrade drone/go-scm dependency
|
||||
|
||||
## [1.8.1] - 2020-06-23
|
||||
### Fixed
|
||||
- support for gitea api pagination, repository sync hanging.
|
||||
|
||||
## [1.8.0] - 2020-06-10
|
||||
### Added
|
||||
- re-assigned repository ownership when deactivating a user.
|
||||
- re-assigned repository ownership when deleting a user.
|
||||
- de-activate a repository when deleting a user if re-assignment fails.
|
||||
- de-activate a repository when deactivating a user if re-assignment fails.
|
||||
- routine to cleanup builds stuck in a pending state.
|
||||
- routine to cleanup builds stuck in a running state.
|
||||
- private mode setting requires authentication to view public repositories.
|
||||
|
||||
### Fixed
|
||||
- canceling a build emits a sql.ErrNoRows error.
|
||||
- custom token is ignored when creating a user account via the API.
|
||||
- machine accounts with sufficient permissions can create builds via the API.
|
||||
|
||||
### Changed
|
||||
- upgraded Go toolchain to version 1.14.4.
|
||||
|
||||
## [1.7.0] - 2020-03-27
|
||||
### Added
|
||||
- endpoint to display the latest build by branch. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to display the latest build by pull request. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to display the latest build by environment. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete a branch from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete a pull request from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- endpoint to delete an environment from the index. [#2940](https://github.com/drone/drone/pull/2940).
|
||||
- page to view the latest build per branch.
|
||||
|
||||
### Fixed
|
||||
- sync routine not executing asynchronously, being cancelled by http context.
|
||||
- sync routine should ignore gitlab subrepositories
|
||||
- convert deploy events in 0.8 yaml to promote events.
|
||||
- do not execute cron job for disabled repositories. [#2931](https://github.com/drone/drone/issues/2931).
|
||||
- remove trailing slash from gitea url to prevent oauth2 token refresh errors, by [@cmj0121](https://github.com/cmj0121). [#2920](https://github.com/drone/drone/issues/2920).
|
||||
- disable font ligatures in build log output. [drone/drone-ui#322](https://github.com/drone/drone-ui/pull/322).
|
||||
- missing am/pm in timestamps
|
||||
|
||||
## [1.6.5] - 2020-01-29
|
||||
### Changed
|
||||
- update version of go-scm
|
||||
- update alpine version in docker images
|
||||
- use ticker for cron jobs for more accurate timing
|
||||
|
||||
## [1.6.4] - 2019-12-30
|
||||
### Added
|
||||
- optionally enable pprof endpoints for profiling, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.3] - 2019-12-10
|
||||
### Fixed
|
||||
- disable caching generated yaml files by commit sha, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Added
|
||||
- support for bitbucket skipverify, by [@toni-moreno](https://github.com/toni-moreno).
|
||||
- support for gitea skipverify, by [@toni-moreno](https://github.com/toni-moreno).
|
||||
|
||||
## [1.6.2] - 2019-11-08
|
||||
### Added
|
||||
- support for loading license contents from env, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- regression not converting legacy pipeline when using new runners, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.1] - 2019-10-17
|
||||
### Added
|
||||
- updated autocert library in support of acme v2 protocol, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- fixed nil pointer when manually adding user from api, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.6.0] - 2019-10-04
|
||||
### Added
|
||||
- added nsswitch to docker images
|
||||
- option to auto-cancel pending builds when newer build enqueued, by [@bradrydzewski](https://github.com/bradrydzewski). [#1980](https://github.com/drone/drone/issues/1980).
|
||||
- endpoint to list all repositories in the database, by [@bradrydzewski](https://github.com/bradrydzewski). [#2785](https://github.com/drone/drone/issues/2785).
|
||||
|
||||
### Fixed
|
||||
- improve sync to handle duplicate repository names with different unique identifiers, by [@bradrydzewski](https://github.com/bradrydzewski). [#2658](https://github.com/drone/drone/issues/2658). _You can revert to the previous sync logic with DRONE_DATABASE_LEGACY_BATCH=true_.
|
||||
|
||||
## [1.5.1] - 2019-09-30
|
||||
### Added
|
||||
- allow organization admins access to organization secret endpoints, by [@bradrydzewski](https://github.com/bradrydzewski). [#2838](https://github.com/drone/drone/issues/2838).
|
||||
|
||||
### Fixed
|
||||
- fix invalid deep links in UI for github enterprise, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ensure correct casing when manually adding user, by [@bradrydzewski](https://github.com/bradrydzewski). [#2766](https://github.com/drone/drone/issues/2766).
|
||||
|
||||
## [1.5.0] - 2019-09-28
|
||||
### Added
|
||||
- endpoint to execute a cron pipeline on-demand, by [@bradrydzewski](https://github.com/bradrydzewski). [#2781](https://github.com/drone/drone/issues/2781).
|
||||
- endpoint to list builds by branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#1495](https://github.com/drone/drone/issues/1495).
|
||||
- ignore skip comments when cron event, by [@bradrydzewski](https://github.com/bradrydzewski). [#2835](https://github.com/drone/drone/issues/2835).
|
||||
- support for admission extensions, by [@bradrydzewski](https://github.com/bradrydzewski). [#2043](https://github.com/drone/drone/issues/2043).
|
||||
- endpoint to provide link to git resources, by [@bradrydzewski](https://github.com/bradrydzewski). [#2843](https://github.com/drone/drone/issues/2843).
|
||||
- improve bitbucket status display text on new pull request screen, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
- missing cron job name in user interface, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- log lines not properly wrapping in user interface, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
[#309](https://github.com/drone/drone-ui/issues/309).
|
||||
|
||||
### Breaking
|
||||
- the server now runs in multi-machine mode by default. In order to run the server in single-machine mode (agents disabled) you must set DRONE_AGENTS_DISABLED=true.
|
||||
|
||||
## [1.4.0] - 2019-09-12
|
||||
### Added
|
||||
- upgrade to Go 1.13 to resolve arm segfault, by [@KN4CK3R](https://github.com/KN4CK3R). [#2823](https://github.com/drone/drone/issues/2823).
|
||||
- configure default visibility, by [@JordanSussman](https://github.com/JordanSussman). [#2824](https://github.com/drone/drone/issues/2824).
|
||||
- configure default trusted flag, by [@vyckou](https://github.com/vyckou).
|
||||
- support for validation plugins, by [@bradrydzewski](https://github.com/bradrydzewski). [#2266](https://github.com/drone/drone/issues/2266).
|
||||
- support for conversion plugins, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- support for cron event type, by [@bradrydzewski](https://github.com/bradrydzewski). [#2705](https://github.com/drone/drone/issues/2705).
|
||||
- support for rollback event, by [@bradrydzewski](https://github.com/bradrydzewski). [#2695](https://github.com/drone/drone/issues/2695).
|
||||
- support for lets encrypt email, by [@bradrydzewski](https://github.com/bradrydzewski). [#2505](https://github.com/drone/drone/issues/2505).
|
||||
|
||||
### Removed
|
||||
- Support for basic auth as an option for Gitea, by [@techknowlogick](https://giteahub.com/techknowlogick). [#2721](https://github.com/drone/drone/issues/2721)
|
||||
|
||||
### Fixed
|
||||
- copy cron job name when restarting a cron job, by [@bradrydzewski](https://github.com/bradrydzewski). [#2760](https://github.com/drone/drone/issues/2760).
|
||||
|
||||
## [1.3.1] - 2019-08-26
|
||||
### Added
|
||||
- support for the GitHub deployment status API, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
## [1.3.0] - 2019-08-20
|
||||
### Added
|
||||
- support for storing logs in Azure Cloud Storage, by [@Lucretius](https://github.com/Lucretius). [#2788](https://github.com/drone/drone/pull/2788)
|
||||
- support for windows server 1903, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- button to view the full log file, by [@dramich](https://github.com/dramich). [drone/drone-ui#287](https://github.com/drone/drone-ui/pull/287).
|
||||
|
||||
### Fixed
|
||||
- read gogs sha from webhook, by [@marcotuna](https://github.com/marcotuna).
|
||||
- create bind volume on host if not exists, by [@bradrydzewski](https://github.com/bradrydzewski). [#2725](https://github.com/drone/drone/issues/2725).
|
||||
- preserve whitespace in build logs, by [@geek1011](https://github.com/geek1011). [drone/drone-ui#294](https://github.com/drone/drone-ui/pull/294).
|
||||
- enable log file download on firefox, by [@bobmanary](https://github.com/bobmanary). [drone/drone-ui#303](https://github.com/drone/drone-ui/pull/303)
|
||||
|
||||
### Security
|
||||
- upgraded to Go 1.12.9 due to CVE-2019-9512 and CVE-2019-9514
|
||||
|
||||
## [1.2.3] - 2019-07-30
|
||||
### Added
|
||||
|
||||
- disable github status for cron jobs
|
||||
- support for action in conditionals, by [@bradrydzewski](https://github.com/bradrydzewski). [#2685](https://github.com/drone/drone/issues/2685).
|
||||
|
||||
### Fixed
|
||||
|
||||
- improve cancel logic for dangling stages, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- improve error when kubernetes malforms the port configuration, by [@bradrydzewski](https://github.com/bradrydzewski). [#2742](https://github.com/drone/drone/issues/2742).
|
||||
- copy parameters from parent build when promoting, by [@bradrydzewski](https://github.com/bradrydzewski). [#2748](https://github.com/drone/drone/issues/2748).
|
||||
|
||||
## [1.2.2] - 2019-07-29
|
||||
### Added
|
||||
|
||||
- support for legacy environment variables
|
||||
- support for legacy workspace based on repository name
|
||||
- support for github deployment hooks
|
||||
- provide base sha for github pull requests
|
||||
- option to filter webhooks by event and type
|
||||
- upgrade drone-yaml to v1.2.2
|
||||
- upgrade drone-runtime to v1.0.7
|
||||
|
||||
### Fixed
|
||||
|
||||
- error when manually creating an empty user, by [@bradrydzewski](https://github.com/bradrydzewski). [#2738](https://github.com/drone/drone/issues/2738).
|
||||
|
||||
## [1.2.1] - 2019-06-11
|
||||
### Added
|
||||
|
||||
- support for legacy tokens to ease upgrade path, by [@bradrydzewski](https://github.com/bradrydzewski). [#2713](https://github.com/drone/drone/issues/2713).
|
||||
- include repository name and id in batch update error message, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix inconsistent base64 encoding and decoding of encrypted secrets, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-yaml to version 1.1.2 for improved 0.8 to 1.0 yaml marshal escaping.
|
||||
- update drone-yaml to version 1.1.3 for improved 0.8 to 1.0 workspace conversion.
|
||||
|
||||
## [1.2.0] - 2019-05-30
|
||||
### Added
|
||||
|
||||
- endpoint to trigger new build for default branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- endpoint to trigger new build for branch, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- endpoint to trigger new build for branch and sha, by [@bradrydzewski](https://github.com/bradrydzewski). [#2679](https://github.com/drone/drone/issues/2679).
|
||||
- enable optional prometheus metrics guest access, by [@janberktold](https://github.com/janberktold)
|
||||
- fallback to database when logs not found in s3, by [@bradrydzewski](https://github.com/bradrydzewski). [#2689](https://github.com/drone/drone/issues/2689).
|
||||
- support for custom stage definitions and runners, by [@bradrydzewski](https://github.com/bradrydzewski). [#2680](https://github.com/drone/drone/issues/2680).
|
||||
- update drone-yaml to version 1.1.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- retrieve latest build by branch, by [@tboerger](https://github.com/tboerger).
|
||||
- copy the fork value when restarting a build, by [@bradrydzewski](https://github.com/bradrydzewski). [#2708](https://github.com/drone/drone/issues/2708).
|
||||
- make healthz available without redirect, by [@bradrydzewski](https://github.com/bradrydzewski). [#2706](https://github.com/drone/drone/issues/2706).
|
||||
|
||||
## [1.1.0] - 2019-04-23
|
||||
### Added
|
||||
|
||||
- specify a user for the pipeline step, by [@bradrydzewski](https://github.com/bradrydzewski). [#2651](https://github.com/drone/drone/issues/2651).
|
||||
- support for Gitea oauth2, by [@techknowlogick](https://github.com/techknowlogick). [#2622](https://github.com/drone/drone/pull/2622).
|
||||
- ping the docker daemon before starting the agent, by [@bradrydzewski](https://github.com/bradrydzewski). [#2495](https://github.com/drone/drone/issues/2495).
|
||||
- support for Cron job name in Yaml trigger block, by [@bradrydzewski](https://github.com/bradrydzewski). [#2628](https://github.com/drone/drone/issues/2628).
|
||||
- support for Cron job name in Yaml when block, by [@bradrydzewski](https://github.com/bradrydzewski). [#2628](https://github.com/drone/drone/issues/2628).
|
||||
- sqlite username column changed to case-insensitive, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- endpoint to purge repository from database, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- support for per-organization secrets, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- include system metadata in global webhooks, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ability to customize cookie secure flag, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-yaml from version 1.0.6 to 1.0.8.
|
||||
- update drone-runtime from version 1.0.4 to 1.0.6.
|
||||
- update go-scm from version 1.0.3 to 1.0.4.
|
||||
|
||||
### Fixed
|
||||
|
||||
- fixed error in mysql table creation syntax, from [@xuyang2](https://github.com/xuyang2). [#2677](https://github.com/drone/drone/pull/2677).
|
||||
- fixed stuck builds when upstream dependency is skipped, from [@bradrydzewski](https://github.com/bradrydzewski). [#2634](https://github.com/drone/drone/issues/2634).
|
||||
- fixed issue running steps with dependencies on failure, from [@bradrydzewski](https://github.com/bradrydzewski). [#2667](https://github.com/drone/drone/issues/2667).
|
||||
|
||||
## [1.0.1] - 2019-04-10
|
||||
### Added
|
||||
|
||||
- pass stage environment variables to pipeline steps, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update go-scm to version 1.3.0, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- update drone-runtime to version to 1.0.4, by [@bradrydzewski](https://github.com/bradrydzewski).
|
||||
- ping docker daemon before agent starts to ensure connectivity, by [@bradrydzewski](https://github.com/bradrydzewski).
|
89
LICENSE
89
LICENSE
@ -1,89 +0,0 @@
|
||||
Copyright 2019 Drone.IO, Inc.
|
||||
|
||||
The Drone Community Edition is licensed under the Apache License,
|
||||
Version 2.0 (the "Apache License"). You may obtain a copy of the
|
||||
Apache License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
The Drone Enterprise Edition is licensed under the Drone
|
||||
Non-Commercial License (the "Non-Commercial License"). A copy of
|
||||
the Non-Commercial License is provided below.
|
||||
|
||||
The source files in this repository have a header indicating
|
||||
which license they are under. The BUILDING_OSS file provides
|
||||
instructions for creating the Community Edition distribution
|
||||
subject to the terms of the Apache License.
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Drone Non-Commercial License
|
||||
|
||||
Contributor: Drone.IO, Inc.
|
||||
|
||||
Source Code: https://github.com/harness/drone
|
||||
|
||||
This license lets you use and share this software for free,
|
||||
with a trial-length time limit on commercial use. Specifically:
|
||||
|
||||
If you follow the rules below, you may do everything with this
|
||||
software that would otherwise infringe either the contributor's
|
||||
copyright in it, any patent claim the contributor can license
|
||||
that covers this software as of the contributor's latest
|
||||
contribution, or both.
|
||||
|
||||
1. You must limit use of this software in any manner primarily
|
||||
intended for or directed toward commercial advantage or
|
||||
private monetary compensation to a trial period of 32
|
||||
consecutive calendar days. This limit does not apply to use in
|
||||
developing feedback, modifications, or extensions that you
|
||||
contribute back to those giving this license.
|
||||
|
||||
2. Ensure everyone who gets a copy of this software from you, in
|
||||
source code or any other form, gets the text of this license
|
||||
and the contributor and source code lines above.
|
||||
|
||||
3. Do not make any legal claim against anyone for infringing any
|
||||
patent claim they would infringe by using this software alone,
|
||||
accusing this software, with or without changes, alone or as
|
||||
part of a larger application.
|
||||
|
||||
You are excused for unknowingly breaking rule 1 if you stop
|
||||
doing anything requiring this license within 30 days of
|
||||
learning you broke the rule.
|
||||
|
||||
**This software comes as is, without any warranty at all. As far
|
||||
as the law allows, the contributor will not be liable for any
|
||||
damages related to this software or this license, for any kind of
|
||||
legal claim.**
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Waiver: Individual and Small Business
|
||||
|
||||
Contributor waives the terms of rule 1 for companies meeting all
|
||||
the following criteria, counting all subsidiaries and affiliated
|
||||
entities as one:
|
||||
|
||||
1. worldwide annual gross revenue under $5 million US dollars,
|
||||
per generally accepted accounting principles
|
||||
|
||||
2. less than $5 million US dollars in all-time aggregate debt and
|
||||
equity financing
|
||||
|
||||
Contributor will not revoke this waiver, but may change terms for
|
||||
future versions of the software.
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Waiver: Low Usage
|
||||
|
||||
Contributor waives the terms of rule 1 for companies meeting all
|
||||
the following criteria, counting all subsidiaries and affiliated
|
||||
entities as one:
|
||||
|
||||
1. less than 5,000 total pipelines executed using this software
|
||||
in the immediately preceding, year-long period
|
||||
|
||||
Contributor will not revoke this waiver, but may change terms for
|
||||
future versions of the software.
|
14
NOTICE
14
NOTICE
@ -1,14 +0,0 @@
|
||||
Drone
|
||||
Copyright 2019 Drone.IO, Inc
|
||||
|
||||
This product includes software developed at Drone.IO, Inc.
|
||||
(http://drone.io/).
|
||||
|
||||
This product includes software developed by Docker, Inc.
|
||||
(https://www.docker.com/).
|
||||
|
||||
This product includes software developed by Canonical Ltd.
|
||||
(https://www.canonical.com/).
|
||||
|
||||
This product includes software developed at CoreOS, Inc.
|
||||
(http://www.coreos.com/).
|
14
README.md
Normal file
14
README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# What is Gitness and where is Drone
|
||||
Gitness is our new open source development platform packed with the power of code hosting and automated CI pipelines.
|
||||
|
||||
Gitness represents a massive investment in the next generation of Drone, with the goal to bring code management and pipelines closer together.\
|
||||
The idea is for Gitness to eventually be at full parity with Drone in terms of pipeline capabilities, allowing users to seemlessly migrate from drone to gitness.
|
||||
But, we expect this to take some time, which is why we took a snapshot of Drone as a feature branch [drone](https://github.com/harness/gitness/tree/drone) ([README](https://github.com/harness/gitness/blob/drone/.github/readme.md)) so it can continue development. As for Gitness, the development is taking place on the [main](https://github.com/harness/gitness/tree/main) branch.
|
||||
|
||||
For more information on Gitness, please visit [gitness.com](https://gitness.com/)\
|
||||
For more information on Drone, please visit [drone.io](https://www.drone.io/)
|
||||
|
||||
## As a Drone customer, do I have to migrate to gitness?
|
||||
No. You can continue to use Drone. Gitness is still in its early stages, but long term it will have all the Drone pipeline features.
|
||||
|
||||
Gitness will also continue to integrate with GitHub, GitLab, Gitea etc. Nobody will be forced to use Gitness code hosting to use the Pipeline portion of the software.
|
129
Taskfile.yml
129
Taskfile.yml
@ -1,129 +0,0 @@
|
||||
# https://taskfile.org
|
||||
|
||||
version: '2'
|
||||
|
||||
tasks:
|
||||
install:
|
||||
dir: cmd/drone-server
|
||||
cmds: [ go install -v ]
|
||||
env:
|
||||
GO111MODULE: on
|
||||
|
||||
build:
|
||||
cmds:
|
||||
- task: build-base
|
||||
vars: { name: server }
|
||||
|
||||
build-base:
|
||||
env:
|
||||
GOOS: linux
|
||||
GOARCH: amd64
|
||||
CGO_ENABLED: '0'
|
||||
GO111MODULE: 'on'
|
||||
cmds:
|
||||
- cmd: >
|
||||
go build -o release/linux/amd64/drone-{{.name}}
|
||||
github.com/drone/drone/cmd/drone-{{.name}}
|
||||
|
||||
cleanup:
|
||||
cmds:
|
||||
- rm -rf release
|
||||
|
||||
docker:
|
||||
cmds:
|
||||
- task: docker-base
|
||||
vars: { name: server, image: drone/drone }
|
||||
|
||||
docker-base:
|
||||
vars:
|
||||
GIT_BRANCH:
|
||||
sh: git rev-parse --abbrev-ref HEAD
|
||||
cmds:
|
||||
- cmd: docker rmi {{.image}}
|
||||
ignore_error: true
|
||||
- cmd: docker rmi {{.image}}:{{.GIT_BRANCH}}
|
||||
ignore_error: true
|
||||
- cmd: >
|
||||
docker build --rm
|
||||
-f docker/Dockerfile.{{.name}}.linux.amd64
|
||||
-t {{.image}} .
|
||||
- cmd: >
|
||||
docker tag {{.image}} {{.image}}:{{.GIT_BRANCH}}
|
||||
|
||||
test:
|
||||
cmds:
|
||||
- go test ./...
|
||||
env:
|
||||
GO111MODULE: 'on'
|
||||
|
||||
test-mysql:
|
||||
env:
|
||||
DRONE_DATABASE_DRIVER: mysql
|
||||
DRONE_DATABASE_DATASOURCE: root@tcp(localhost:3306)/test?parseTime=true
|
||||
GO111MODULE: 'on'
|
||||
cmds:
|
||||
- cmd: docker kill mysql
|
||||
silent: true
|
||||
ignore_error: true
|
||||
- cmd: >
|
||||
docker run
|
||||
-p 3306:3306
|
||||
--env MYSQL_DATABASE=test
|
||||
--env MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
||||
--name mysql
|
||||
--detach
|
||||
--rm
|
||||
mysql:5.7
|
||||
--character-set-server=utf8mb4
|
||||
--collation-server=utf8mb4_unicode_ci
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/batch
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/batch2
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/build
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/card
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/cron
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/logs
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/perm
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/repos
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/secret
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/secret/global
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/stage
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/step
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/template
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/user
|
||||
- cmd: docker kill mysql
|
||||
|
||||
test-postgres:
|
||||
env:
|
||||
DRONE_DATABASE_DRIVER: postgres
|
||||
DRONE_DATABASE_DATASOURCE: host=localhost user=postgres password=postgres dbname=postgres sslmode=disable
|
||||
GO111MODULE: 'on'
|
||||
cmds:
|
||||
- cmd: docker kill postgres
|
||||
ignore_error: true
|
||||
silent: false
|
||||
- silent: false
|
||||
cmd: >
|
||||
docker run
|
||||
-p 5432:5432
|
||||
--env POSTGRES_PASSWORD=postgres
|
||||
--env POSTGRES_USER=postgres
|
||||
--name postgres
|
||||
--detach
|
||||
--rm
|
||||
postgres:9-alpine
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/batch
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/batch2
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/build
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/card
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/cron
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/logs
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/perm
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/repos
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/secret
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/secret/global
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/stage
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/step
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/template
|
||||
- cmd: go test -count=1 github.com/drone/drone/store/user
|
||||
- cmd: docker kill postgres
|
||||
silent: true
|
@ -1,123 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/dchest/uniuri"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/logger"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var errMissingToken = errors.New("You must provide the machine account token")
|
||||
|
||||
// New returns a new account bootstrapper.
|
||||
func New(users core.UserStore) *Bootstrapper {
|
||||
return &Bootstrapper{
|
||||
users: users,
|
||||
}
|
||||
}
|
||||
|
||||
// Bootstrapper bootstraps the system with the initial account.
|
||||
type Bootstrapper struct {
|
||||
users core.UserStore
|
||||
}
|
||||
|
||||
// Bootstrap creates the user account. If the account already exists,
|
||||
// no account is created, and a nil error is returned.
|
||||
func (b *Bootstrapper) Bootstrap(ctx context.Context, user *core.User) error {
|
||||
if user.Login == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
log := logrus.WithFields(
|
||||
logrus.Fields{
|
||||
"login": user.Login,
|
||||
"admin": user.Admin,
|
||||
"machine": user.Machine,
|
||||
"token": user.Hash,
|
||||
},
|
||||
)
|
||||
|
||||
log.Debugln("bootstrap: create account")
|
||||
|
||||
existingUser, err := b.users.FindLogin(ctx, user.Login)
|
||||
if err == nil {
|
||||
ctx = logger.WithContext(ctx, log)
|
||||
return b.update(ctx, user, existingUser)
|
||||
}
|
||||
|
||||
if user.Machine && user.Hash == "" {
|
||||
log.Errorln("bootstrap: cannot create account, missing token")
|
||||
return errMissingToken
|
||||
}
|
||||
|
||||
user.Active = true
|
||||
user.Created = time.Now().Unix()
|
||||
user.Updated = time.Now().Unix()
|
||||
if user.Hash == "" {
|
||||
user.Hash = uniuri.NewLen(32)
|
||||
}
|
||||
|
||||
err = b.users.Create(ctx, user)
|
||||
if err != nil {
|
||||
log = log.WithError(err)
|
||||
log.Errorln("bootstrap: cannot create account")
|
||||
return err
|
||||
}
|
||||
|
||||
log = log.WithField("token", user.Hash)
|
||||
log.Infoln("bootstrap: account created")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bootstrapper) update(ctx context.Context, src, dst *core.User) error {
|
||||
log := logger.FromContext(ctx)
|
||||
log.Debugln("bootstrap: updating account")
|
||||
var updated bool
|
||||
if src.Hash != dst.Hash && src.Hash != "" {
|
||||
log.Infoln("bootstrap: found updated user token")
|
||||
dst.Hash = src.Hash
|
||||
updated = true
|
||||
}
|
||||
if src.Machine != dst.Machine {
|
||||
log.Infoln("bootstrap: found updated machine flag")
|
||||
dst.Machine = src.Machine
|
||||
updated = true
|
||||
}
|
||||
if src.Admin != dst.Admin {
|
||||
log.Infoln("bootstrap: found updated admin flag")
|
||||
dst.Admin = src.Admin
|
||||
updated = true
|
||||
}
|
||||
if !updated {
|
||||
log.Debugln("bootstrap: account already up-to-date")
|
||||
return nil
|
||||
}
|
||||
dst.Updated = time.Now().Unix()
|
||||
err := b.users.Update(ctx, dst)
|
||||
if err != nil {
|
||||
log = log.WithError(err)
|
||||
log.Errorln("bootstrap: cannot update account")
|
||||
return err
|
||||
}
|
||||
log.Infoln("bootstrap: account successfully updated")
|
||||
return nil
|
||||
}
|
@ -1,170 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/mock"
|
||||
|
||||
"github.com/dchest/uniuri"
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var noContext = context.TODO()
|
||||
|
||||
func init() {
|
||||
logrus.SetOutput(ioutil.Discard)
|
||||
}
|
||||
|
||||
func TestBootstrap(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: true,
|
||||
Admin: true,
|
||||
Hash: uniuri.NewLen(32),
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(nil, sql.ErrNoRows)
|
||||
store.EXPECT().Create(gomock.Any(), dummyUser).Return(nil)
|
||||
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_GenerateHash(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: false,
|
||||
Admin: true,
|
||||
Hash: "",
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(nil, sql.ErrNoRows)
|
||||
store.EXPECT().Create(gomock.Any(), dummyUser).Return(nil)
|
||||
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if got, want := len(dummyUser.Hash), 32; got != want {
|
||||
t.Errorf("Want generated hash length %d, got %d", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_Empty(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "",
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_Exists_WithoutUpdates(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: true,
|
||||
Admin: true,
|
||||
Hash: uniuri.NewLen(32),
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(dummyUser, nil)
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_Exists_WithUpdates(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: true,
|
||||
Admin: true,
|
||||
Hash: uniuri.NewLen(32),
|
||||
}
|
||||
existingUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: false,
|
||||
Admin: false,
|
||||
Hash: uniuri.NewLen(32),
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(existingUser, nil)
|
||||
store.EXPECT().Update(gomock.Any(), existingUser).Return(nil)
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_MissingTokenError(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: true,
|
||||
Admin: true,
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(nil, sql.ErrNoRows)
|
||||
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != errMissingToken {
|
||||
t.Errorf("Expect missing token error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBootstrap_CreateError(t *testing.T) {
|
||||
controller := gomock.NewController(t)
|
||||
defer controller.Finish()
|
||||
|
||||
dummyUser := &core.User{
|
||||
Login: "octocat",
|
||||
Machine: true,
|
||||
Admin: true,
|
||||
Hash: uniuri.NewLen(32),
|
||||
}
|
||||
|
||||
store := mock.NewMockUserStore(controller)
|
||||
store.EXPECT().FindLogin(gomock.Any(), dummyUser.Login).Return(nil, sql.ErrNoRows)
|
||||
store.EXPECT().Create(gomock.Any(), dummyUser).Return(sql.ErrConnDone)
|
||||
|
||||
err := New(store).Bootstrap(noContext, dummyUser)
|
||||
if err != sql.ErrConnDone {
|
||||
t.Errorf("Expect error creating user")
|
||||
}
|
||||
}
|
@ -1,644 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/dchest/uniuri"
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/kelseyhightower/envconfig"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
// IMPORTANT please do not add new configuration parameters unless it has
|
||||
// been discussed on the mailing list. We are attempting to reduce the
|
||||
// number of configuration parameters, and may reject pull requests that
|
||||
// introduce new parameters. (mailing list https://community.harness.io)
|
||||
|
||||
// default runner hostname.
|
||||
var hostname string
|
||||
|
||||
func init() {
|
||||
hostname, _ = os.Hostname()
|
||||
if hostname == "" {
|
||||
hostname = "localhost"
|
||||
}
|
||||
}
|
||||
|
||||
type (
|
||||
// Config provides the system configuration.
|
||||
Config struct {
|
||||
License string `envconfig:"DRONE_LICENSE"`
|
||||
|
||||
Authn Authentication
|
||||
Agent Agent
|
||||
AzureBlob AzureBlob
|
||||
Convert Convert
|
||||
Cleanup Cleanup
|
||||
Cron Cron
|
||||
Cloning Cloning
|
||||
Database Database
|
||||
Datadog Datadog
|
||||
Docker Docker
|
||||
HTTP HTTP
|
||||
Jsonnet Jsonnet
|
||||
Starlark Starlark
|
||||
Logging Logging
|
||||
Prometheus Prometheus
|
||||
Proxy Proxy
|
||||
Redis Redis
|
||||
Registration Registration
|
||||
Registries Registries
|
||||
Repository Repository
|
||||
Runner Runner
|
||||
RPC RPC
|
||||
S3 S3
|
||||
Secrets Secrets
|
||||
Server Server
|
||||
Session Session
|
||||
Status Status
|
||||
Users Users
|
||||
Validate Validate
|
||||
Webhook Webhook
|
||||
Yaml Yaml
|
||||
|
||||
// Remote configurations
|
||||
Bitbucket Bitbucket
|
||||
Gitea Gitea
|
||||
Github Github
|
||||
GitLab GitLab
|
||||
Gogs Gogs
|
||||
Stash Stash
|
||||
Gitee Gitee
|
||||
}
|
||||
|
||||
// Cloning provides the cloning configuration.
|
||||
Cloning struct {
|
||||
AlwaysAuth bool `envconfig:"DRONE_GIT_ALWAYS_AUTH"`
|
||||
Username string `envconfig:"DRONE_GIT_USERNAME"`
|
||||
Password string `envconfig:"DRONE_GIT_PASSWORD"`
|
||||
Image string `envconfig:"DRONE_GIT_IMAGE"`
|
||||
Pull string `envconfig:"DRONE_GIT_IMAGE_PULL" default:"IfNotExists"`
|
||||
}
|
||||
|
||||
Cleanup struct {
|
||||
Disabled bool `envconfig:"DRONE_CLEANUP_DISABLED"`
|
||||
Interval time.Duration `envconfig:"DRONE_CLEANUP_INTERVAL" default:"24h"`
|
||||
Running time.Duration `envconfig:"DRONE_CLEANUP_DEADLINE_RUNNING" default:"24h"`
|
||||
Pending time.Duration `envconfig:"DRONE_CLEANUP_DEADLINE_PENDING" default:"24h"`
|
||||
Buffer time.Duration `envconfig:"DRONE_CLEANUP_BUFFER" default:"30m"`
|
||||
}
|
||||
|
||||
// Cron provides the cron configuration.
|
||||
Cron struct {
|
||||
Disabled bool `envconfig:"DRONE_CRON_DISABLED"`
|
||||
Interval time.Duration `envconfig:"DRONE_CRON_INTERVAL" default:"30m"`
|
||||
}
|
||||
|
||||
// Database provides the database configuration.
|
||||
Database struct {
|
||||
Driver string `envconfig:"DRONE_DATABASE_DRIVER" default:"sqlite3"`
|
||||
Datasource string `envconfig:"DRONE_DATABASE_DATASOURCE" default:"core.sqlite"`
|
||||
Secret string `envconfig:"DRONE_DATABASE_SECRET"`
|
||||
MaxConnections int `envconfig:"DRONE_DATABASE_MAX_CONNECTIONS" default:"0"`
|
||||
|
||||
// Feature flag
|
||||
LegacyBatch bool `envconfig:"DRONE_DATABASE_LEGACY_BATCH"`
|
||||
|
||||
// Feature flag
|
||||
EncryptUserTable bool `envconfig:"DRONE_DATABASE_ENCRYPT_USER_TABLE"`
|
||||
EncryptMixedContent bool `envconfig:"DRONE_DATABASE_ENCRYPT_MIXED_MODE"`
|
||||
}
|
||||
|
||||
// Docker provides docker configuration
|
||||
Docker struct {
|
||||
Config string `envconfig:"DRONE_DOCKER_CONFIG"`
|
||||
}
|
||||
|
||||
// Datadog provides datadog configuration
|
||||
Datadog struct {
|
||||
Enabled bool `envconfig:"DRONE_DATADOG_ENABLED"`
|
||||
Endpoint string `envconfig:"DRONE_DATADOG_ENDPOINT"`
|
||||
Token string `envconfig:"DRONE_DATADOG_TOKEN"`
|
||||
}
|
||||
|
||||
// Jsonnet configures the jsonnet plugin
|
||||
Jsonnet struct {
|
||||
Enabled bool `envconfig:"DRONE_JSONNET_ENABLED"`
|
||||
ImportLimit int `envconfig:"DRONE_JSONNET_IMPORT_LIMIT" default:"0"`
|
||||
}
|
||||
|
||||
// Starlark configures the starlark plugin
|
||||
Starlark struct {
|
||||
Enabled bool `envconfig:"DRONE_STARLARK_ENABLED"`
|
||||
StepLimit uint64 `envconfig:"DRONE_STARLARK_STEP_LIMIT"`
|
||||
SizeLimit uint64 `envconfig:"DRONE_STARLARK_SIZE_LIMIT" default:"0"`
|
||||
}
|
||||
|
||||
// License provides license configuration
|
||||
License struct {
|
||||
Key string `envconfig:"DRONE_LICENSE"`
|
||||
Endpoint string `envconfig:"DRONE_LICENSE_ENDPOINT"`
|
||||
}
|
||||
|
||||
// Logging provides the logging configuration.
|
||||
Logging struct {
|
||||
Debug bool `envconfig:"DRONE_LOGS_DEBUG"`
|
||||
Trace bool `envconfig:"DRONE_LOGS_TRACE"`
|
||||
Color bool `envconfig:"DRONE_LOGS_COLOR"`
|
||||
Pretty bool `envconfig:"DRONE_LOGS_PRETTY"`
|
||||
Text bool `envconfig:"DRONE_LOGS_TEXT"`
|
||||
}
|
||||
|
||||
// Prometheus provides the prometheus configuration.
|
||||
Prometheus struct {
|
||||
EnableAnonymousAccess bool `envconfig:"DRONE_PROMETHEUS_ANONYMOUS_ACCESS" default:"false"`
|
||||
}
|
||||
|
||||
// Redis provides the redis configuration.
|
||||
Redis struct {
|
||||
ConnectionString string `envconfig:"DRONE_REDIS_CONNECTION"`
|
||||
Addr string `envconfig:"DRONE_REDIS_ADDR"`
|
||||
Password string `envconfig:"DRONE_REDIS_PASSWORD"`
|
||||
DB int `envconfig:"DRONE_REDIS_DB"`
|
||||
}
|
||||
|
||||
// Repository provides the repository configuration.
|
||||
Repository struct {
|
||||
Filter []string `envconfig:"DRONE_REPOSITORY_FILTER"`
|
||||
Visibility string `envconfig:"DRONE_REPOSITORY_VISIBILITY"`
|
||||
Trusted bool `envconfig:"DRONE_REPOSITORY_TRUSTED"`
|
||||
|
||||
// THIS SETTING IS INTERNAL USE ONLY AND SHOULD
|
||||
// NOT BE USED OR RELIED UPON IN PRODUCTION.
|
||||
Ignore []string `envconfig:"DRONE_REPOSITORY_IGNORE"`
|
||||
}
|
||||
|
||||
// Registries provides the registry configuration.
|
||||
Registries struct {
|
||||
Endpoint string `envconfig:"DRONE_REGISTRY_ENDPOINT"`
|
||||
Password string `envconfig:"DRONE_REGISTRY_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_REGISTRY_SKIP_VERIFY"`
|
||||
}
|
||||
|
||||
// Secrets provides the secret configuration.
|
||||
Secrets struct {
|
||||
Endpoint string `envconfig:"DRONE_SECRET_ENDPOINT"`
|
||||
Password string `envconfig:"DRONE_SECRET_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_SECRET_SKIP_VERIFY"`
|
||||
}
|
||||
|
||||
// RPC provides the rpc configuration.
|
||||
RPC struct {
|
||||
Server string `envconfig:"DRONE_RPC_SERVER"`
|
||||
Secret string `envconfig:"DRONE_RPC_SECRET"`
|
||||
Debug bool `envconfig:"DRONE_RPC_DEBUG"`
|
||||
Host string `envconfig:"DRONE_RPC_HOST"`
|
||||
Proto string `envconfig:"DRONE_RPC_PROTO"`
|
||||
// Hosts map[string]string `envconfig:"DRONE_RPC_EXTRA_HOSTS"`
|
||||
}
|
||||
|
||||
Agent struct {
|
||||
Disabled bool `envconfig:"DRONE_AGENTS_DISABLED"`
|
||||
}
|
||||
|
||||
// Runner provides the runner configuration.
|
||||
Runner struct {
|
||||
Local bool `envconfig:"DRONE_RUNNER_LOCAL"`
|
||||
Image string `envconfig:"DRONE_RUNNER_IMAGE" default:"drone/controller:1"`
|
||||
Platform string `envconfig:"DRONE_RUNNER_PLATFORM" default:"linux/amd64"`
|
||||
OS string `envconfig:"DRONE_RUNNER_OS"`
|
||||
Arch string `envconfig:"DRONE_RUNNER_ARCH"`
|
||||
Kernel string `envconfig:"DRONE_RUNNER_KERNEL"`
|
||||
Variant string `envconfig:"DRONE_RUNNER_VARIANT"`
|
||||
Machine string `envconfig:"DRONE_RUNNER_NAME"`
|
||||
Capacity int `envconfig:"DRONE_RUNNER_CAPACITY" default:"2"`
|
||||
Labels map[string]string `envconfig:"DRONE_RUNNER_LABELS"`
|
||||
Volumes []string `envconfig:"DRONE_RUNNER_VOLUMES"`
|
||||
Networks []string `envconfig:"DRONE_RUNNER_NETWORKS"`
|
||||
Devices []string `envconfig:"DRONE_RUNNER_DEVICES"`
|
||||
Privileged []string `envconfig:"DRONE_RUNNER_PRIVILEGED_IMAGES"`
|
||||
Environ map[string]string `envconfig:"DRONE_RUNNER_ENVIRON"`
|
||||
Limits struct {
|
||||
MemSwapLimit Bytes `envconfig:"DRONE_LIMIT_MEM_SWAP"`
|
||||
MemLimit Bytes `envconfig:"DRONE_LIMIT_MEM"`
|
||||
ShmSize Bytes `envconfig:"DRONE_LIMIT_SHM_SIZE"`
|
||||
CPUQuota int64 `envconfig:"DRONE_LIMIT_CPU_QUOTA"`
|
||||
CPUShares int64 `envconfig:"DRONE_LIMIT_CPU_SHARES"`
|
||||
CPUSet string `envconfig:"DRONE_LIMIT_CPU_SET"`
|
||||
}
|
||||
}
|
||||
|
||||
// Server provides the server configuration.
|
||||
Server struct {
|
||||
Addr string `envconfig:"-"`
|
||||
Host string `envconfig:"DRONE_SERVER_HOST" default:"localhost:8080"`
|
||||
Port string `envconfig:"DRONE_SERVER_PORT" default:":8080"`
|
||||
Proto string `envconfig:"DRONE_SERVER_PROTO" default:"http"`
|
||||
Pprof bool `envconfig:"DRONE_PPROF_ENABLED"`
|
||||
Acme bool `envconfig:"DRONE_TLS_AUTOCERT"`
|
||||
Email string `envconfig:"DRONE_TLS_EMAIL"`
|
||||
Cert string `envconfig:"DRONE_TLS_CERT"`
|
||||
Key string `envconfig:"DRONE_TLS_KEY"`
|
||||
}
|
||||
|
||||
// Proxy provides proxy server configuration.
|
||||
Proxy struct {
|
||||
Addr string `envconfig:"-"`
|
||||
Host string `envconfig:"DRONE_SERVER_PROXY_HOST"`
|
||||
Proto string `envconfig:"DRONE_SERVER_PROXY_PROTO"`
|
||||
}
|
||||
|
||||
// Registration configuration.
|
||||
Registration struct {
|
||||
Closed bool `envconfig:"DRONE_REGISTRATION_CLOSED"`
|
||||
}
|
||||
|
||||
// Authentication Controller configuration
|
||||
Authentication struct {
|
||||
Endpoint string `envconfig:"DRONE_ADMISSION_PLUGIN_ENDPOINT"`
|
||||
Secret string `envconfig:"DRONE_ADMISSION_PLUGIN_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_ADMISSION_PLUGIN_SKIP_VERIFY"`
|
||||
}
|
||||
|
||||
// Session provides the session configuration.
|
||||
Session struct {
|
||||
Timeout time.Duration `envconfig:"DRONE_COOKIE_TIMEOUT" default:"720h"`
|
||||
Secret string `envconfig:"DRONE_COOKIE_SECRET"`
|
||||
Secure bool `envconfig:"DRONE_COOKIE_SECURE"`
|
||||
}
|
||||
|
||||
// Status provides status configurations.
|
||||
Status struct {
|
||||
Disabled bool `envconfig:"DRONE_STATUS_DISABLED"`
|
||||
Name string `envconfig:"DRONE_STATUS_NAME"`
|
||||
}
|
||||
|
||||
// Users provides the user configuration.
|
||||
Users struct {
|
||||
Create UserCreate `envconfig:"DRONE_USER_CREATE"`
|
||||
Filter []string `envconfig:"DRONE_USER_FILTER"`
|
||||
MinAge time.Duration `envconfig:"DRONE_MIN_AGE"`
|
||||
}
|
||||
|
||||
// Webhook provides the webhook configuration.
|
||||
Webhook struct {
|
||||
Events []string `envconfig:"DRONE_WEBHOOK_EVENTS"`
|
||||
Endpoint []string `envconfig:"DRONE_WEBHOOK_ENDPOINT"`
|
||||
Secret string `envconfig:"DRONE_WEBHOOK_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_WEBHOOK_SKIP_VERIFY"`
|
||||
}
|
||||
|
||||
// Yaml provides the yaml webhook configuration.
|
||||
Yaml struct {
|
||||
Endpoint string `envconfig:"DRONE_YAML_ENDPOINT"`
|
||||
Secret string `envconfig:"DRONE_YAML_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_YAML_SKIP_VERIFY"`
|
||||
Timeout time.Duration `envconfig:"DRONE_YAML_TIMEOUT" default:"1m"`
|
||||
}
|
||||
|
||||
// Convert provides the converter webhook configuration.
|
||||
Convert struct {
|
||||
Extension string `envconfig:"DRONE_CONVERT_PLUGIN_EXTENSION"`
|
||||
Endpoint string `envconfig:"DRONE_CONVERT_PLUGIN_ENDPOINT"`
|
||||
Secret string `envconfig:"DRONE_CONVERT_PLUGIN_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_CONVERT_PLUGIN_SKIP_VERIFY"`
|
||||
CacheSize int `envconfig:"DRONE_CONVERT_PLUGIN_CACHE_SIZE" default:"10"`
|
||||
Timeout time.Duration `envconfig:"DRONE_CONVERT_TIMEOUT" default:"1m"`
|
||||
|
||||
// this flag can be removed once we solve for
|
||||
// https://github.com/harness/drone/pull/2994#issuecomment-795955312
|
||||
Multi bool `envconfig:"DRONE_CONVERT_MULTI"`
|
||||
}
|
||||
|
||||
// Validate provides the validation webhook configuration.
|
||||
Validate struct {
|
||||
Endpoint string `envconfig:"DRONE_VALIDATE_PLUGIN_ENDPOINT"`
|
||||
Secret string `envconfig:"DRONE_VALIDATE_PLUGIN_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_VALIDATE_PLUGIN_SKIP_VERIFY"`
|
||||
Timeout time.Duration `envconfig:"DRONE_VALIDATE_TIMEOUT" default:"1m"`
|
||||
}
|
||||
|
||||
//
|
||||
// Source code management.
|
||||
//
|
||||
|
||||
// Bitbucket provides the bitbucket client configuration.
|
||||
Bitbucket struct {
|
||||
ClientID string `envconfig:"DRONE_BITBUCKET_CLIENT_ID"`
|
||||
ClientSecret string `envconfig:"DRONE_BITBUCKET_CLIENT_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_BITBUCKET_SKIP_VERIFY"`
|
||||
Debug bool `envconfig:"DRONE_BITBUCKET_DEBUG"`
|
||||
}
|
||||
|
||||
// Gitea provides the gitea client configuration.
|
||||
Gitea struct {
|
||||
Server string `envconfig:"DRONE_GITEA_SERVER"`
|
||||
ClientID string `envconfig:"DRONE_GITEA_CLIENT_ID"`
|
||||
ClientSecret string `envconfig:"DRONE_GITEA_CLIENT_SECRET"`
|
||||
RedirectURL string `envconfig:"DRONE_GITEA_REDIRECT_URL"`
|
||||
SkipVerify bool `envconfig:"DRONE_GITEA_SKIP_VERIFY"`
|
||||
Scope []string `envconfig:"DRONE_GITEA_SCOPE" default:"repo,repo:status,user:email,read:org"`
|
||||
Debug bool `envconfig:"DRONE_GITEA_DEBUG"`
|
||||
}
|
||||
|
||||
// Github provides the github client configuration.
|
||||
Github struct {
|
||||
Server string `envconfig:"DRONE_GITHUB_SERVER" default:"https://github.com"`
|
||||
APIServer string `envconfig:"DRONE_GITHUB_API_SERVER"`
|
||||
ClientID string `envconfig:"DRONE_GITHUB_CLIENT_ID"`
|
||||
ClientSecret string `envconfig:"DRONE_GITHUB_CLIENT_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_GITHUB_SKIP_VERIFY"`
|
||||
Scope []string `envconfig:"DRONE_GITHUB_SCOPE" default:"repo,repo:status,user:email,read:org"`
|
||||
RateLimit int `envconfig:"DRONE_GITHUB_USER_RATELIMIT"`
|
||||
Debug bool `envconfig:"DRONE_GITHUB_DEBUG"`
|
||||
}
|
||||
|
||||
// Gitee providers the gitee client configuration.
|
||||
Gitee struct {
|
||||
Server string `envconfig:"DRONE_GITEE_SERVER" default:"https://gitee.com"`
|
||||
APIServer string `envconfig:"DRONE_GITEE_API_SERVER" default:"https://gitee.com/api/v5"`
|
||||
ClientID string `envconfig:"DRONE_GITEE_CLIENT_ID"`
|
||||
ClientSecret string `envconfig:"DRONE_GITEE_CLIENT_SECRET"`
|
||||
RedirectURL string `envconfig:"DRONE_GITEE_REDIRECT_URL"`
|
||||
SkipVerify bool `envconfig:"DRONE_GITEE_SKIP_VERIFY"`
|
||||
Scope []string `envconfig:"DRONE_GITEE_SCOPE" default:"user_info,projects,pull_requests,hook"`
|
||||
Debug bool `envconfig:"DRONE_GITEE_DEBUG"`
|
||||
}
|
||||
|
||||
// GitLab provides the gitlab client configuration.
|
||||
GitLab struct {
|
||||
Server string `envconfig:"DRONE_GITLAB_SERVER" default:"https://gitlab.com"`
|
||||
ClientID string `envconfig:"DRONE_GITLAB_CLIENT_ID"`
|
||||
ClientSecret string `envconfig:"DRONE_GITLAB_CLIENT_SECRET"`
|
||||
SkipVerify bool `envconfig:"DRONE_GITLAB_SKIP_VERIFY"`
|
||||
Debug bool `envconfig:"DRONE_GITLAB_DEBUG"`
|
||||
}
|
||||
|
||||
// Gogs provides the gogs client configuration.
|
||||
Gogs struct {
|
||||
Server string `envconfig:"DRONE_GOGS_SERVER"`
|
||||
SkipVerify bool `envconfig:"DRONE_GOGS_SKIP_VERIFY"`
|
||||
Debug bool `envconfig:"DRONE_GOGS_DEBUG"`
|
||||
}
|
||||
|
||||
// Stash provides the stash client configuration.
|
||||
Stash struct {
|
||||
Server string `envconfig:"DRONE_STASH_SERVER"`
|
||||
ConsumerKey string `envconfig:"DRONE_STASH_CONSUMER_KEY"`
|
||||
ConsumerSecret string `envconfig:"DRONE_STASH_CONSUMER_SECRET"`
|
||||
PrivateKey string `envconfig:"DRONE_STASH_PRIVATE_KEY"`
|
||||
SkipVerify bool `envconfig:"DRONE_STASH_SKIP_VERIFY"`
|
||||
Debug bool `envconfig:"DRONE_STASH_DEBUG"`
|
||||
}
|
||||
|
||||
// S3 provides the storage configuration.
|
||||
S3 struct {
|
||||
Bucket string `envconfig:"DRONE_S3_BUCKET"`
|
||||
Prefix string `envconfig:"DRONE_S3_PREFIX"`
|
||||
Endpoint string `envconfig:"DRONE_S3_ENDPOINT"`
|
||||
PathStyle bool `envconfig:"DRONE_S3_PATH_STYLE"`
|
||||
}
|
||||
|
||||
//AzureBlob providers the storage configuration.
|
||||
AzureBlob struct {
|
||||
ContainerName string `envconfig:"DRONE_AZURE_BLOB_CONTAINER_NAME"`
|
||||
StorageAccountName string `envconfig:"DRONE_AZURE_STORAGE_ACCOUNT_NAME"`
|
||||
StorageAccessKey string `envconfig:"DRONE_AZURE_STORAGE_ACCESS_KEY"`
|
||||
}
|
||||
|
||||
// HTTP provides http configuration.
|
||||
HTTP struct {
|
||||
AllowedHosts []string `envconfig:"DRONE_HTTP_ALLOWED_HOSTS"`
|
||||
HostsProxyHeaders []string `envconfig:"DRONE_HTTP_PROXY_HEADERS"`
|
||||
SSLRedirect bool `envconfig:"DRONE_HTTP_SSL_REDIRECT"`
|
||||
SSLTemporaryRedirect bool `envconfig:"DRONE_HTTP_SSL_TEMPORARY_REDIRECT"`
|
||||
SSLHost string `envconfig:"DRONE_HTTP_SSL_HOST"`
|
||||
SSLProxyHeaders map[string]string `envconfig:"DRONE_HTTP_SSL_PROXY_HEADERS"`
|
||||
STSSeconds int64 `envconfig:"DRONE_HTTP_STS_SECONDS"`
|
||||
STSIncludeSubdomains bool `envconfig:"DRONE_HTTP_STS_INCLUDE_SUBDOMAINS"`
|
||||
STSPreload bool `envconfig:"DRONE_HTTP_STS_PRELOAD"`
|
||||
ForceSTSHeader bool `envconfig:"DRONE_HTTP_STS_FORCE_HEADER"`
|
||||
BrowserXSSFilter bool `envconfig:"DRONE_HTTP_BROWSER_XSS_FILTER" default:"true"`
|
||||
FrameDeny bool `envconfig:"DRONE_HTTP_FRAME_DENY" default:"true"`
|
||||
ContentTypeNosniff bool `envconfig:"DRONE_HTTP_CONTENT_TYPE_NO_SNIFF"`
|
||||
ContentSecurityPolicy string `envconfig:"DRONE_HTTP_CONTENT_SECURITY_POLICY"`
|
||||
ReferrerPolicy string `envconfig:"DRONE_HTTP_REFERRER_POLICY"`
|
||||
}
|
||||
)
|
||||
|
||||
// Environ returns the settings from the environment.
|
||||
func Environ() (Config, error) {
|
||||
cfg := Config{}
|
||||
err := envconfig.Process("", &cfg)
|
||||
defaultAddress(&cfg)
|
||||
defaultProxy(&cfg)
|
||||
defaultRunner(&cfg)
|
||||
defaultSession(&cfg)
|
||||
defaultCallback(&cfg)
|
||||
configureGithub(&cfg)
|
||||
if err := kubernetesServiceConflict(&cfg); err != nil {
|
||||
return cfg, err
|
||||
}
|
||||
return cfg, err
|
||||
}
|
||||
|
||||
// String returns the configuration in string format.
|
||||
func (c *Config) String() string {
|
||||
out, _ := yaml.Marshal(c)
|
||||
return string(out)
|
||||
}
|
||||
|
||||
// IsGitHub returns true if the GitHub integration
|
||||
// is activated.
|
||||
func (c *Config) IsGitHub() bool {
|
||||
return c.Github.ClientID != ""
|
||||
}
|
||||
|
||||
// IsGitHubEnterprise returns true if the GitHub
|
||||
// integration is activated.
|
||||
func (c *Config) IsGitHubEnterprise() bool {
|
||||
return c.IsGitHub() && !strings.HasPrefix(c.Github.Server, "https://github.com")
|
||||
}
|
||||
|
||||
// IsGitLab returns true if the GitLab integration
|
||||
// is activated.
|
||||
func (c *Config) IsGitLab() bool {
|
||||
return c.GitLab.ClientID != ""
|
||||
}
|
||||
|
||||
// IsGogs returns true if the Gogs integration
|
||||
// is activated.
|
||||
func (c *Config) IsGogs() bool {
|
||||
return c.Gogs.Server != ""
|
||||
}
|
||||
|
||||
// IsGitea returns true if the Gitea integration
|
||||
// is activated.
|
||||
func (c *Config) IsGitea() bool {
|
||||
return c.Gitea.Server != ""
|
||||
}
|
||||
|
||||
// IsGitee returns true if the Gitee integration
|
||||
// is activated.
|
||||
func (c *Config) IsGitee() bool {
|
||||
return c.Gitee.ClientID != ""
|
||||
}
|
||||
|
||||
// IsBitbucket returns true if the Bitbucket Cloud
|
||||
// integration is activated.
|
||||
func (c *Config) IsBitbucket() bool {
|
||||
return c.Bitbucket.ClientID != ""
|
||||
}
|
||||
|
||||
// IsStash returns true if the Atlassian Stash
|
||||
// integration is activated.
|
||||
func (c *Config) IsStash() bool {
|
||||
return c.Stash.Server != ""
|
||||
}
|
||||
|
||||
func cleanHostname(hostname string) string {
|
||||
hostname = strings.ToLower(hostname)
|
||||
hostname = strings.TrimPrefix(hostname, "http://")
|
||||
hostname = strings.TrimPrefix(hostname, "https://")
|
||||
|
||||
return hostname
|
||||
}
|
||||
|
||||
func defaultAddress(c *Config) {
|
||||
if c.Server.Key != "" || c.Server.Cert != "" || c.Server.Acme {
|
||||
c.Server.Port = ":443"
|
||||
c.Server.Proto = "https"
|
||||
}
|
||||
c.Server.Host = cleanHostname(c.Server.Host)
|
||||
c.Server.Addr = c.Server.Proto + "://" + c.Server.Host
|
||||
}
|
||||
|
||||
func defaultProxy(c *Config) {
|
||||
if c.Proxy.Host == "" {
|
||||
c.Proxy.Host = c.Server.Host
|
||||
} else {
|
||||
c.Proxy.Host = cleanHostname(c.Proxy.Host)
|
||||
}
|
||||
if c.Proxy.Proto == "" {
|
||||
c.Proxy.Proto = c.Server.Proto
|
||||
}
|
||||
c.Proxy.Addr = c.Proxy.Proto + "://" + c.Proxy.Host
|
||||
}
|
||||
|
||||
func defaultCallback(c *Config) {
|
||||
if c.RPC.Host == "" {
|
||||
c.RPC.Host = c.Server.Host
|
||||
}
|
||||
if c.RPC.Proto == "" {
|
||||
c.RPC.Proto = c.Server.Proto
|
||||
}
|
||||
}
|
||||
|
||||
func defaultRunner(c *Config) {
|
||||
if c.Runner.Machine == "" {
|
||||
c.Runner.Machine = hostname
|
||||
}
|
||||
parts := strings.Split(c.Runner.Platform, "/")
|
||||
if len(parts) == 2 && c.Runner.OS == "" {
|
||||
c.Runner.OS = parts[0]
|
||||
}
|
||||
if len(parts) == 2 && c.Runner.Arch == "" {
|
||||
c.Runner.Arch = parts[1]
|
||||
}
|
||||
}
|
||||
|
||||
func defaultSession(c *Config) {
|
||||
if c.Session.Secret == "" {
|
||||
c.Session.Secret = uniuri.NewLen(32)
|
||||
}
|
||||
}
|
||||
|
||||
func configureGithub(c *Config) {
|
||||
if c.Github.APIServer != "" {
|
||||
return
|
||||
}
|
||||
if c.Github.Server == "https://github.com" {
|
||||
c.Github.APIServer = "https://api.github.com"
|
||||
} else {
|
||||
c.Github.APIServer = strings.TrimSuffix(c.Github.Server, "/") + "/api/v3"
|
||||
}
|
||||
}
|
||||
|
||||
func kubernetesServiceConflict(c *Config) error {
|
||||
if strings.HasPrefix(c.Server.Port, "tcp://") {
|
||||
return errors.New("Invalid port configuration. See https://community.harness.io/t/drone-server-changing-ports-protocol/11400")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Bytes stores number bytes (e.g. megabytes)
|
||||
type Bytes int64
|
||||
|
||||
// Decode implements a decoder that parses a string representation
|
||||
// of bytes into the number of bytes it represents.
|
||||
func (b *Bytes) Decode(value string) error {
|
||||
v, err := humanize.ParseBytes(value)
|
||||
*b = Bytes(v)
|
||||
return err
|
||||
}
|
||||
|
||||
// Int64 returns the int64 value of the Byte.
|
||||
func (b *Bytes) Int64() int64 {
|
||||
return int64(*b)
|
||||
}
|
||||
|
||||
// String returns the string value of the Byte.
|
||||
func (b *Bytes) String() string {
|
||||
return fmt.Sprint(*b)
|
||||
}
|
||||
|
||||
// UserCreate stores account information used to bootstrap
|
||||
// the admin user account when the system initializes.
|
||||
type UserCreate struct {
|
||||
Username string
|
||||
Machine bool
|
||||
Admin bool
|
||||
Token string
|
||||
}
|
||||
|
||||
// Decode implements a decoder that extracts user information
|
||||
// from the environment variable string.
|
||||
func (u *UserCreate) Decode(value string) error {
|
||||
for _, param := range strings.Split(value, ",") {
|
||||
parts := strings.Split(param, ":")
|
||||
if len(parts) != 2 {
|
||||
continue
|
||||
}
|
||||
key := parts[0]
|
||||
val := parts[1]
|
||||
switch key {
|
||||
case "username":
|
||||
u.Username = val
|
||||
case "token":
|
||||
u.Token = val
|
||||
case "machine":
|
||||
u.Machine = val == "true"
|
||||
case "admin":
|
||||
u.Admin = val == "true"
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package config
|
||||
|
||||
import "testing"
|
||||
|
||||
func Test_cleanHostname(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
hostname string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "no prefix",
|
||||
hostname: "drone.io",
|
||||
want: "drone.io",
|
||||
},
|
||||
{
|
||||
name: "http prefix",
|
||||
hostname: "http://drone.io",
|
||||
want: "drone.io",
|
||||
},
|
||||
{
|
||||
name: "https prefix",
|
||||
hostname: "https://drone.io",
|
||||
want: "drone.io",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := cleanHostname(tt.hostname); got != tt.want {
|
||||
t.Errorf("cleanHostname() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@ -1,286 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rsa"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"strings"
|
||||
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/go-scm/scm"
|
||||
"github.com/drone/go-scm/scm/driver/bitbucket"
|
||||
"github.com/drone/go-scm/scm/driver/gitea"
|
||||
"github.com/drone/go-scm/scm/driver/gitee"
|
||||
"github.com/drone/go-scm/scm/driver/github"
|
||||
"github.com/drone/go-scm/scm/driver/gitlab"
|
||||
"github.com/drone/go-scm/scm/driver/gogs"
|
||||
"github.com/drone/go-scm/scm/driver/stash"
|
||||
"github.com/drone/go-scm/scm/transport/oauth1"
|
||||
"github.com/drone/go-scm/scm/transport/oauth2"
|
||||
|
||||
"github.com/google/wire"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// wire set for loading the scm client.
|
||||
var clientSet = wire.NewSet(
|
||||
provideClient,
|
||||
)
|
||||
|
||||
// provideBitbucketClient is a Wire provider function that
|
||||
// returns a Source Control Management client based on the
|
||||
// environment configuration.
|
||||
func provideClient(config config.Config) *scm.Client {
|
||||
switch {
|
||||
case config.Bitbucket.ClientID != "":
|
||||
return provideBitbucketClient(config)
|
||||
case config.Github.ClientID != "":
|
||||
return provideGithubClient(config)
|
||||
case config.Gitee.ClientID != "":
|
||||
return provideGiteeClient(config)
|
||||
case config.Gitea.Server != "":
|
||||
return provideGiteaClient(config)
|
||||
case config.GitLab.ClientID != "":
|
||||
return provideGitlabClient(config)
|
||||
case config.Gogs.Server != "":
|
||||
return provideGogsClient(config)
|
||||
case config.Stash.ConsumerKey != "":
|
||||
return provideStashClient(config)
|
||||
}
|
||||
logrus.Fatalln("main: source code management system not configured")
|
||||
return nil
|
||||
}
|
||||
|
||||
// provideBitbucketClient is a Wire provider function that
|
||||
// returns a Bitbucket Cloud client based on the environment
|
||||
// configuration.
|
||||
func provideBitbucketClient(config config.Config) *scm.Client {
|
||||
client := bitbucket.NewDefault()
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Source: &oauth2.Refresher{
|
||||
ClientID: config.Bitbucket.ClientID,
|
||||
ClientSecret: config.Bitbucket.ClientSecret,
|
||||
Endpoint: "https://bitbucket.org/site/oauth2/access_token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
},
|
||||
},
|
||||
}
|
||||
if config.Bitbucket.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideGithubClient is a Wire provider function that returns
|
||||
// a GitHub client based on the environment configuration.
|
||||
func provideGithubClient(config config.Config) *scm.Client {
|
||||
client, err := github.New(config.Github.APIServer)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the GitHub client")
|
||||
}
|
||||
if config.Github.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Base: defaultTransport(config.Github.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideGiteeClient is a Wire provider function that returns
|
||||
// a Gitee client based on the environment configuration.
|
||||
func provideGiteeClient(config config.Config) *scm.Client {
|
||||
client, err := gitee.New(config.Gitee.APIServer)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the Gitee client")
|
||||
}
|
||||
if config.Gitee.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Scheme: oauth2.SchemeBearer,
|
||||
Source: &oauth2.Refresher{
|
||||
ClientID: config.Gitee.ClientID,
|
||||
ClientSecret: config.Gitee.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.Gitee.Server, "/") + "/oauth/token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
},
|
||||
Base: defaultTransport(config.Gitee.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideGiteaClient is a Wire provider function that returns
|
||||
// a Gitea client based on the environment configuration.
|
||||
func provideGiteaClient(config config.Config) *scm.Client {
|
||||
client, err := gitea.New(config.Gitea.Server)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the Gitea client")
|
||||
}
|
||||
if config.Gitea.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Scheme: oauth2.SchemeBearer,
|
||||
Source: &oauth2.Refresher{
|
||||
ClientID: config.Gitea.ClientID,
|
||||
ClientSecret: config.Gitea.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.Gitea.Server, "/") + "/login/oauth/access_token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
},
|
||||
Base: defaultTransport(config.Gitea.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideGitlabClient is a Wire provider function that returns
|
||||
// a GitLab client based on the environment configuration.
|
||||
func provideGitlabClient(config config.Config) *scm.Client {
|
||||
logrus.WithField("server", config.GitLab.Server).
|
||||
WithField("client", config.GitLab.ClientID).
|
||||
WithField("skip_verify", config.GitLab.SkipVerify).
|
||||
Debugln("main: creating the GitLab client")
|
||||
|
||||
client, err := gitlab.New(config.GitLab.Server)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the GitLab client")
|
||||
}
|
||||
if config.GitLab.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Scheme: oauth2.SchemeBearer,
|
||||
Source: &oauth2.Refresher{
|
||||
ClientID: config.GitLab.ClientID,
|
||||
ClientSecret: config.GitLab.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.GitLab.Server, "/") + "/oauth/token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
},
|
||||
Base: defaultTransport(config.GitLab.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideGogsClient is a Wire provider function that returns
|
||||
// a Gogs client based on the environment configuration.
|
||||
func provideGogsClient(config config.Config) *scm.Client {
|
||||
logrus.WithField("server", config.Gogs.Server).
|
||||
WithField("skip_verify", config.Gogs.SkipVerify).
|
||||
Debugln("main: creating the Gogs client")
|
||||
|
||||
client, err := gogs.New(config.Gogs.Server)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the Gogs client")
|
||||
}
|
||||
if config.Gogs.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth2.Transport{
|
||||
Scheme: oauth2.SchemeToken,
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Base: defaultTransport(config.Gogs.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// provideStashClient is a Wire provider function that returns
|
||||
// a Stash client based on the environment configuration.
|
||||
func provideStashClient(config config.Config) *scm.Client {
|
||||
logrus.WithField("server", config.Stash.Server).
|
||||
WithField("skip_verify", config.Stash.SkipVerify).
|
||||
Debugln("main: creating the Stash client")
|
||||
|
||||
privateKey, err := parsePrivateKeyFile(config.Stash.PrivateKey)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot parse the Stash Private Key")
|
||||
}
|
||||
client, err := stash.New(config.Stash.Server)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot create the Stash client")
|
||||
}
|
||||
if config.Stash.Debug {
|
||||
client.DumpResponse = httputil.DumpResponse
|
||||
}
|
||||
client.Client = &http.Client{
|
||||
Transport: &oauth1.Transport{
|
||||
ConsumerKey: config.Stash.ConsumerKey,
|
||||
PrivateKey: privateKey,
|
||||
Source: oauth1.ContextTokenSource(),
|
||||
Base: defaultTransport(config.Stash.SkipVerify),
|
||||
},
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
// defaultClient provides a default http.Client. If skipverify
|
||||
// is true, the default transport will skip ssl verification.
|
||||
func defaultClient(skipverify bool) *http.Client {
|
||||
client := &http.Client{}
|
||||
client.Transport = defaultTransport(skipverify)
|
||||
return client
|
||||
}
|
||||
|
||||
// defaultTransport provides a default http.Transport. If
|
||||
// skipverify is true, the transport will skip ssl verification.
|
||||
func defaultTransport(skipverify bool) http.RoundTripper {
|
||||
return &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
TLSClientConfig: &tls.Config{
|
||||
InsecureSkipVerify: skipverify,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// parsePrivateKeyFile is a helper function that parses an
|
||||
// RSA Private Key file encoded in PEM format.
|
||||
func parsePrivateKeyFile(path string) (*rsa.PrivateKey, error) {
|
||||
d, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return parsePrivateKey(d)
|
||||
}
|
||||
|
||||
// parsePrivateKey is a helper function that parses an RSA
|
||||
// Private Key encoded in PEM format.
|
||||
func parsePrivateKey(data []byte) (*rsa.PrivateKey, error) {
|
||||
p, _ := pem.Decode(data)
|
||||
return x509.ParsePKCS1PrivateKey(p.Bytes)
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
// Copyright 2021 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/service/redisdb"
|
||||
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// wire set for loading the external services.
|
||||
var externalSet = wire.NewSet(
|
||||
provideRedisClient,
|
||||
)
|
||||
|
||||
func provideRedisClient(config config.Config) (rdb redisdb.RedisDB, err error) {
|
||||
return redisdb.New(config)
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/service/license"
|
||||
"github.com/drone/go-scm/scm"
|
||||
|
||||
"github.com/google/wire"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// wire set for loading the license.
|
||||
var licenseSet = wire.NewSet(
|
||||
provideLicense,
|
||||
license.NewService,
|
||||
)
|
||||
|
||||
// provideLicense is a Wire provider function that returns a
|
||||
// license loaded from a license file.
|
||||
func provideLicense(client *scm.Client, config config.Config) *core.License {
|
||||
l, err := license.Load(config.License)
|
||||
if config.License == "" {
|
||||
l = license.Trial(client.Driver.String())
|
||||
} else if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: invalid or expired license")
|
||||
}
|
||||
logrus.WithFields(
|
||||
logrus.Fields{
|
||||
"kind": l.Kind,
|
||||
"expires": l.Expires,
|
||||
"repo.limit": l.Repos,
|
||||
"user.limit": l.Users,
|
||||
"build.limit": l.Builds,
|
||||
},
|
||||
).Debugln("main: license loaded")
|
||||
return l
|
||||
}
|
@ -1,223 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/go-login/login"
|
||||
"github.com/drone/go-login/login/bitbucket"
|
||||
"github.com/drone/go-login/login/gitea"
|
||||
"github.com/drone/go-login/login/gitee"
|
||||
"github.com/drone/go-login/login/github"
|
||||
"github.com/drone/go-login/login/gitlab"
|
||||
"github.com/drone/go-login/login/gogs"
|
||||
"github.com/drone/go-login/login/stash"
|
||||
"github.com/drone/go-scm/scm/transport/oauth2"
|
||||
"strings"
|
||||
|
||||
"github.com/google/wire"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// wire set for loading the authenticator.
|
||||
var loginSet = wire.NewSet(
|
||||
provideLogin,
|
||||
provideRefresher,
|
||||
)
|
||||
|
||||
// provideLogin is a Wire provider function that returns an
|
||||
// authenticator based on the environment configuration.
|
||||
func provideLogin(config config.Config) login.Middleware {
|
||||
switch {
|
||||
case config.Bitbucket.ClientID != "":
|
||||
return provideBitbucketLogin(config)
|
||||
case config.Github.ClientID != "":
|
||||
return provideGithubLogin(config)
|
||||
case config.Gitee.ClientID != "":
|
||||
return provideGiteeLogin(config)
|
||||
case config.Gitea.Server != "":
|
||||
return provideGiteaLogin(config)
|
||||
case config.GitLab.ClientID != "":
|
||||
return provideGitlabLogin(config)
|
||||
case config.Gogs.Server != "":
|
||||
return provideGogsLogin(config)
|
||||
case config.Stash.ConsumerKey != "":
|
||||
return provideStashLogin(config)
|
||||
}
|
||||
logrus.Fatalln("main: source code management system not configured")
|
||||
return nil
|
||||
}
|
||||
|
||||
// provideBitbucketLogin is a Wire provider function that
|
||||
// returns a Bitbucket Cloud authenticator based on the
|
||||
// environment configuration.
|
||||
func provideBitbucketLogin(config config.Config) login.Middleware {
|
||||
if config.Bitbucket.ClientID == "" {
|
||||
return nil
|
||||
}
|
||||
return &bitbucket.Config{
|
||||
ClientID: config.Bitbucket.ClientID,
|
||||
ClientSecret: config.Bitbucket.ClientSecret,
|
||||
RedirectURL: config.Server.Addr + "/login",
|
||||
}
|
||||
}
|
||||
|
||||
// provideGithubLogin is a Wire provider function that returns
|
||||
// a GitHub authenticator based on the environment configuration.
|
||||
func provideGithubLogin(config config.Config) login.Middleware {
|
||||
if config.Github.ClientID == "" {
|
||||
return nil
|
||||
}
|
||||
return &github.Config{
|
||||
ClientID: config.Github.ClientID,
|
||||
ClientSecret: config.Github.ClientSecret,
|
||||
Scope: config.Github.Scope,
|
||||
Server: config.Github.Server,
|
||||
Client: defaultClient(config.Github.SkipVerify),
|
||||
Logger: logrus.StandardLogger(),
|
||||
}
|
||||
}
|
||||
|
||||
// provideGiteeLogin is a Wire provider function that returns
|
||||
// a Gitee authenticator based on the environment configuration.
|
||||
func provideGiteeLogin(config config.Config) login.Middleware {
|
||||
if config.Gitee.ClientID == "" {
|
||||
return nil
|
||||
}
|
||||
redirectURL := config.Gitee.RedirectURL
|
||||
if redirectURL == "" {
|
||||
redirectURL = config.Server.Addr + "/login"
|
||||
}
|
||||
return &gitee.Config{
|
||||
ClientID: config.Gitee.ClientID,
|
||||
ClientSecret: config.Gitee.ClientSecret,
|
||||
RedirectURL: redirectURL,
|
||||
Server: config.Gitee.Server,
|
||||
Scope: config.Gitee.Scope,
|
||||
Client: defaultClient(config.Gitee.SkipVerify),
|
||||
}
|
||||
}
|
||||
|
||||
// provideGiteaLogin is a Wire provider function that returns
|
||||
// a Gitea authenticator based on the environment configuration.
|
||||
func provideGiteaLogin(config config.Config) login.Middleware {
|
||||
if config.Gitea.Server == "" {
|
||||
return nil
|
||||
}
|
||||
redirectURL := config.Gitea.RedirectURL
|
||||
if redirectURL == "" {
|
||||
redirectURL = config.Server.Addr + "/login"
|
||||
}
|
||||
return &gitea.Config{
|
||||
ClientID: config.Gitea.ClientID,
|
||||
ClientSecret: config.Gitea.ClientSecret,
|
||||
Server: config.Gitea.Server,
|
||||
Client: defaultClient(config.Gitea.SkipVerify),
|
||||
Logger: logrus.StandardLogger(),
|
||||
RedirectURL: redirectURL,
|
||||
Scope: config.Gitea.Scope,
|
||||
}
|
||||
}
|
||||
|
||||
// provideGitlabLogin is a Wire provider function that returns
|
||||
// a GitLab authenticator based on the environment configuration.
|
||||
func provideGitlabLogin(config config.Config) login.Middleware {
|
||||
if config.GitLab.ClientID == "" {
|
||||
return nil
|
||||
}
|
||||
return &gitlab.Config{
|
||||
ClientID: config.GitLab.ClientID,
|
||||
ClientSecret: config.GitLab.ClientSecret,
|
||||
RedirectURL: config.Server.Addr + "/login",
|
||||
Server: config.GitLab.Server,
|
||||
Client: defaultClient(config.GitLab.SkipVerify),
|
||||
}
|
||||
}
|
||||
|
||||
// provideGogsLogin is a Wire provider function that returns
|
||||
// a Gogs authenticator based on the environment configuration.
|
||||
func provideGogsLogin(config config.Config) login.Middleware {
|
||||
if config.Gogs.Server == "" {
|
||||
return nil
|
||||
}
|
||||
return &gogs.Config{
|
||||
Label: "drone",
|
||||
Login: "/login/form",
|
||||
Server: config.Gogs.Server,
|
||||
Client: defaultClient(config.Gogs.SkipVerify),
|
||||
}
|
||||
}
|
||||
|
||||
// provideStashLogin is a Wire provider function that returns
|
||||
// a Stash authenticator based on the environment configuration.
|
||||
func provideStashLogin(config config.Config) login.Middleware {
|
||||
if config.Stash.ConsumerKey == "" {
|
||||
return nil
|
||||
}
|
||||
privateKey, err := stash.ParsePrivateKeyFile(config.Stash.PrivateKey)
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("main: cannot parse Private Key file")
|
||||
}
|
||||
return &stash.Config{
|
||||
Address: config.Stash.Server,
|
||||
ConsumerKey: config.Stash.ConsumerKey,
|
||||
ConsumerSecret: config.Stash.ConsumerSecret,
|
||||
PrivateKey: privateKey,
|
||||
CallbackURL: config.Server.Addr + "/login",
|
||||
Client: defaultClient(config.Stash.SkipVerify),
|
||||
}
|
||||
}
|
||||
|
||||
// provideRefresher is a Wire provider function that returns
|
||||
// an oauth token refresher for Bitbucket and Gitea
|
||||
func provideRefresher(config config.Config) *oauth2.Refresher {
|
||||
switch {
|
||||
case config.Bitbucket.ClientID != "":
|
||||
return &oauth2.Refresher{
|
||||
ClientID: config.Bitbucket.ClientID,
|
||||
ClientSecret: config.Bitbucket.ClientSecret,
|
||||
Endpoint: "https://bitbucket.org/site/oauth2/access_token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Client: defaultClient(config.Bitbucket.SkipVerify),
|
||||
}
|
||||
case config.Gitea.ClientID != "":
|
||||
return &oauth2.Refresher{
|
||||
ClientID: config.Gitea.ClientID,
|
||||
ClientSecret: config.Gitea.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.Gitea.Server, "/") + "/login/oauth/access_token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Client: defaultClient(config.Gitea.SkipVerify),
|
||||
}
|
||||
case config.GitLab.ClientID != "":
|
||||
return &oauth2.Refresher{
|
||||
ClientID: config.GitLab.ClientID,
|
||||
ClientSecret: config.GitLab.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.GitLab.Server, "/") + "/oauth/token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Client: defaultClient(config.GitLab.SkipVerify),
|
||||
}
|
||||
case config.Gitee.ClientID != "":
|
||||
return &oauth2.Refresher{
|
||||
ClientID: config.Gitee.ClientID,
|
||||
ClientSecret: config.Gitee.ClientSecret,
|
||||
Endpoint: strings.TrimSuffix(config.Gitee.Server, "/") + "/oauth/token",
|
||||
Source: oauth2.ContextTokenSource(),
|
||||
Client: defaultClient(config.Gitee.SkipVerify),
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
@ -1,171 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
spec "github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/plugin/admission"
|
||||
"github.com/drone/drone/plugin/config"
|
||||
"github.com/drone/drone/plugin/converter"
|
||||
"github.com/drone/drone/plugin/registry"
|
||||
"github.com/drone/drone/plugin/secret"
|
||||
"github.com/drone/drone/plugin/validator"
|
||||
"github.com/drone/drone/plugin/webhook"
|
||||
"github.com/drone/go-scm/scm"
|
||||
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// wire set for loading plugins.
|
||||
var pluginSet = wire.NewSet(
|
||||
provideAdmissionPlugin,
|
||||
provideConfigPlugin,
|
||||
provideConvertPlugin,
|
||||
provideRegistryPlugin,
|
||||
provideSecretPlugin,
|
||||
provideValidatePlugin,
|
||||
provideWebhookPlugin,
|
||||
)
|
||||
|
||||
// provideAdmissionPlugin is a Wire provider function that
|
||||
// returns an admission plugin based on the environment
|
||||
// configuration.
|
||||
func provideAdmissionPlugin(client *scm.Client, orgs core.OrganizationService, users core.UserService, config spec.Config) core.AdmissionService {
|
||||
return admission.Combine(
|
||||
admission.Membership(orgs, config.Users.Filter),
|
||||
admission.Open(config.Registration.Closed),
|
||||
admission.Nobot(users, config.Users.MinAge),
|
||||
admission.External(
|
||||
config.Authn.Endpoint,
|
||||
config.Authn.Secret,
|
||||
config.Authn.SkipVerify,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
// provideConfigPlugin is a Wire provider function that returns
|
||||
// a yaml configuration plugin based on the environment
|
||||
// configuration.
|
||||
func provideConfigPlugin(client *scm.Client, contents core.FileService, conf spec.Config) core.ConfigService {
|
||||
return config.Combine(
|
||||
config.Memoize(
|
||||
config.Global(
|
||||
conf.Yaml.Endpoint,
|
||||
conf.Yaml.Secret,
|
||||
conf.Yaml.SkipVerify,
|
||||
conf.Yaml.Timeout,
|
||||
),
|
||||
),
|
||||
config.Repository(contents),
|
||||
)
|
||||
}
|
||||
|
||||
// provideConvertPlugin is a Wire provider function that returns
|
||||
// a yaml conversion plugin based on the environment
|
||||
// configuration.
|
||||
func provideConvertPlugin(client *scm.Client, fileService core.FileService, conf spec.Config, templateStore core.TemplateStore) core.ConvertService {
|
||||
return converter.Combine(
|
||||
conf.Convert.Multi,
|
||||
converter.Legacy(false),
|
||||
converter.Starlark(
|
||||
conf.Starlark.Enabled,
|
||||
conf.Starlark.StepLimit,
|
||||
conf.Starlark.SizeLimit,
|
||||
),
|
||||
converter.Jsonnet(
|
||||
conf.Jsonnet.Enabled,
|
||||
conf.Jsonnet.ImportLimit,
|
||||
fileService,
|
||||
),
|
||||
converter.Template(
|
||||
templateStore,
|
||||
conf.Starlark.StepLimit,
|
||||
conf.Starlark.SizeLimit,
|
||||
),
|
||||
converter.Memoize(
|
||||
converter.Remote(
|
||||
conf.Convert.Endpoint,
|
||||
conf.Convert.Secret,
|
||||
conf.Convert.Extension,
|
||||
conf.Convert.SkipVerify,
|
||||
conf.Convert.Timeout,
|
||||
),
|
||||
conf.Convert.CacheSize,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
// provideRegistryPlugin is a Wire provider function that
|
||||
// returns a registry plugin based on the environment
|
||||
// configuration.
|
||||
func provideRegistryPlugin(config spec.Config) core.RegistryService {
|
||||
return registry.Combine(
|
||||
registry.External(
|
||||
config.Secrets.Endpoint,
|
||||
config.Secrets.Password,
|
||||
config.Secrets.SkipVerify,
|
||||
),
|
||||
registry.FileSource(
|
||||
config.Docker.Config,
|
||||
),
|
||||
registry.EndpointSource(
|
||||
config.Registries.Endpoint,
|
||||
config.Registries.Password,
|
||||
config.Registries.SkipVerify,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
// provideSecretPlugin is a Wire provider function that returns
|
||||
// a secret plugin based on the environment configuration.
|
||||
func provideSecretPlugin(config spec.Config) core.SecretService {
|
||||
return secret.External(
|
||||
config.Secrets.Endpoint,
|
||||
config.Secrets.Password,
|
||||
config.Secrets.SkipVerify,
|
||||
)
|
||||
}
|
||||
|
||||
// provideValidatePlugin is a Wire provider function that
|
||||
// returns a yaml validation plugin based on the environment
|
||||
// configuration.
|
||||
func provideValidatePlugin(conf spec.Config) core.ValidateService {
|
||||
return validator.Combine(
|
||||
validator.Remote(
|
||||
conf.Validate.Endpoint,
|
||||
conf.Validate.Secret,
|
||||
conf.Validate.SkipVerify,
|
||||
conf.Validate.Timeout,
|
||||
),
|
||||
// THIS FEATURE IS INTERNAL USE ONLY AND SHOULD
|
||||
// NOT BE USED OR RELIED UPON IN PRODUCTION.
|
||||
validator.Filter(
|
||||
nil,
|
||||
conf.Repository.Ignore,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
// provideWebhookPlugin is a Wire provider function that returns
|
||||
// a webhook plugin based on the environment configuration.
|
||||
func provideWebhookPlugin(config spec.Config, system *core.System) core.WebhookSender {
|
||||
return webhook.New(webhook.Config{
|
||||
Events: config.Webhook.Events,
|
||||
Endpoint: config.Webhook.Endpoint,
|
||||
Secret: config.Webhook.Secret,
|
||||
System: system,
|
||||
})
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone-runtime/engine/docker"
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/operator/manager"
|
||||
"github.com/drone/drone/operator/runner"
|
||||
|
||||
"github.com/google/wire"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// wire set for loading the server.
|
||||
var runnerSet = wire.NewSet(
|
||||
provideRunner,
|
||||
)
|
||||
|
||||
// provideRunner is a Wire provider function that returns a
|
||||
// local build runner configured from the environment.
|
||||
func provideRunner(
|
||||
manager manager.BuildManager,
|
||||
secrets core.SecretService,
|
||||
registry core.RegistryService,
|
||||
config config.Config,
|
||||
) *runner.Runner {
|
||||
// the local runner is only created when remote agents
|
||||
// are disabled
|
||||
if config.Agent.Disabled == false {
|
||||
return nil
|
||||
}
|
||||
engine, err := docker.NewEnv()
|
||||
if err != nil {
|
||||
logrus.WithError(err).
|
||||
Fatalln("cannot load the docker engine")
|
||||
return nil
|
||||
}
|
||||
return &runner.Runner{
|
||||
Platform: config.Runner.Platform,
|
||||
OS: config.Runner.OS,
|
||||
Arch: config.Runner.Arch,
|
||||
Kernel: config.Runner.Kernel,
|
||||
Variant: config.Runner.Variant,
|
||||
Engine: engine,
|
||||
Manager: manager,
|
||||
Secrets: secrets,
|
||||
Registry: registry,
|
||||
Volumes: config.Runner.Volumes,
|
||||
Networks: config.Runner.Networks,
|
||||
Devices: config.Runner.Devices,
|
||||
Privileged: config.Runner.Privileged,
|
||||
Machine: config.Runner.Machine,
|
||||
Labels: config.Runner.Labels,
|
||||
Environ: config.Runner.Environ,
|
||||
Limits: runner.Limits{
|
||||
MemSwapLimit: int64(config.Runner.Limits.MemSwapLimit),
|
||||
MemLimit: int64(config.Runner.Limits.MemLimit),
|
||||
ShmSize: int64(config.Runner.Limits.ShmSize),
|
||||
CPUQuota: config.Runner.Limits.CPUQuota,
|
||||
CPUShares: config.Runner.Limits.CPUShares,
|
||||
CPUSet: config.Runner.Limits.CPUSet,
|
||||
},
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/scheduler/queue"
|
||||
"github.com/drone/drone/service/redisdb"
|
||||
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// wire set for loading the scheduler.
|
||||
var schedulerSet = wire.NewSet(
|
||||
provideScheduler,
|
||||
)
|
||||
|
||||
// provideScheduler is a Wire provider function that returns a
|
||||
// scheduler based on the environment configuration.
|
||||
func provideScheduler(store core.StageStore, r redisdb.RedisDB) core.Scheduler {
|
||||
return queue.New(store, r)
|
||||
}
|
@ -1,147 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/handler/api"
|
||||
"github.com/drone/drone/handler/health"
|
||||
"github.com/drone/drone/handler/web"
|
||||
"github.com/drone/drone/metric"
|
||||
"github.com/drone/drone/operator/manager"
|
||||
"github.com/drone/drone/operator/manager/rpc"
|
||||
"github.com/drone/drone/operator/manager/rpc2"
|
||||
"github.com/drone/drone/server"
|
||||
"github.com/google/wire"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/go-chi/chi/middleware"
|
||||
"github.com/unrolled/secure"
|
||||
)
|
||||
|
||||
type (
|
||||
healthzHandler http.Handler
|
||||
metricsHandler http.Handler
|
||||
pprofHandler http.Handler
|
||||
rpcHandlerV1 http.Handler
|
||||
rpcHandlerV2 http.Handler
|
||||
)
|
||||
|
||||
// wire set for loading the server.
|
||||
var serverSet = wire.NewSet(
|
||||
manager.New,
|
||||
api.New,
|
||||
web.New,
|
||||
provideHealthz,
|
||||
provideMetric,
|
||||
providePprof,
|
||||
provideRouter,
|
||||
provideRPC,
|
||||
provideRPC2,
|
||||
provideServer,
|
||||
provideServerOptions,
|
||||
)
|
||||
|
||||
// provideRouter is a Wire provider function that returns a
|
||||
// router that is serves the provided handlers.
|
||||
func provideRouter(api api.Server, web web.Server, rpcv1 rpcHandlerV1, rpcv2 rpcHandlerV2, healthz healthzHandler, metrics *metric.Server, pprof pprofHandler) *chi.Mux {
|
||||
r := chi.NewRouter()
|
||||
r.Mount("/healthz", healthz)
|
||||
r.Mount("/metrics", metrics)
|
||||
r.Mount("/api", api.Handler())
|
||||
r.Mount("/rpc/v2", rpcv2)
|
||||
r.Mount("/rpc", rpcv1)
|
||||
r.Mount("/", web.Handler())
|
||||
r.Mount("/debug", pprof)
|
||||
return r
|
||||
}
|
||||
|
||||
// provideMetric is a Wire provider function that returns the
|
||||
// healthcheck server.
|
||||
func provideHealthz() healthzHandler {
|
||||
v := health.New()
|
||||
return healthzHandler(v)
|
||||
}
|
||||
|
||||
// provideMetric is a Wire provider function that returns the
|
||||
// metrics server exposing metrics in prometheus format.
|
||||
func provideMetric(session core.Session, config config.Config) *metric.Server {
|
||||
return metric.NewServer(session, config.Prometheus.EnableAnonymousAccess)
|
||||
}
|
||||
|
||||
// providePprof is a Wire provider function that returns the
|
||||
// pprof server endpoints.
|
||||
func providePprof(config config.Config) pprofHandler {
|
||||
if config.Server.Pprof == false {
|
||||
return pprofHandler(
|
||||
http.NotFoundHandler(),
|
||||
)
|
||||
}
|
||||
return pprofHandler(
|
||||
middleware.Profiler(),
|
||||
)
|
||||
}
|
||||
|
||||
// provideRPC is a Wire provider function that returns an rpc
|
||||
// handler that exposes the build manager to a remote agent.
|
||||
func provideRPC(m manager.BuildManager, config config.Config) rpcHandlerV1 {
|
||||
v := rpc.NewServer(m, config.RPC.Secret)
|
||||
return rpcHandlerV1(v)
|
||||
}
|
||||
|
||||
// provideRPC2 is a Wire provider function that returns an rpc
|
||||
// handler that exposes the build manager to a remote agent.
|
||||
func provideRPC2(m manager.BuildManager, config config.Config) rpcHandlerV2 {
|
||||
v := rpc2.NewServer(m, config.RPC.Secret)
|
||||
return rpcHandlerV2(v)
|
||||
}
|
||||
|
||||
// provideServer is a Wire provider function that returns an
|
||||
// http server that is configured from the environment.
|
||||
func provideServer(handler *chi.Mux, config config.Config) *server.Server {
|
||||
return &server.Server{
|
||||
Acme: config.Server.Acme,
|
||||
Addr: config.Server.Port,
|
||||
Cert: config.Server.Cert,
|
||||
Key: config.Server.Key,
|
||||
Host: config.Server.Host,
|
||||
Handler: handler,
|
||||
}
|
||||
}
|
||||
|
||||
// provideServerOptions is a Wire provider function that returns
|
||||
// the http web server security option from the environment.
|
||||
func provideServerOptions(config config.Config) secure.Options {
|
||||
return secure.Options{
|
||||
AllowedHosts: config.HTTP.AllowedHosts,
|
||||
HostsProxyHeaders: config.HTTP.HostsProxyHeaders,
|
||||
SSLRedirect: config.HTTP.SSLRedirect,
|
||||
SSLTemporaryRedirect: config.HTTP.SSLTemporaryRedirect,
|
||||
SSLHost: config.HTTP.SSLHost,
|
||||
SSLProxyHeaders: config.HTTP.SSLProxyHeaders,
|
||||
STSSeconds: config.HTTP.STSSeconds,
|
||||
STSIncludeSubdomains: config.HTTP.STSIncludeSubdomains,
|
||||
STSPreload: config.HTTP.STSPreload,
|
||||
ForceSTSHeader: config.HTTP.ForceSTSHeader,
|
||||
FrameDeny: config.HTTP.FrameDeny,
|
||||
ContentTypeNosniff: config.HTTP.ContentTypeNosniff,
|
||||
BrowserXssFilter: config.HTTP.BrowserXSSFilter,
|
||||
ContentSecurityPolicy: config.HTTP.ContentSecurityPolicy,
|
||||
ReferrerPolicy: config.HTTP.ReferrerPolicy,
|
||||
}
|
||||
}
|
@ -1,220 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/livelog"
|
||||
"github.com/drone/drone/metric/sink"
|
||||
"github.com/drone/drone/pubsub"
|
||||
"github.com/drone/drone/service/canceler"
|
||||
"github.com/drone/drone/service/canceler/reaper"
|
||||
"github.com/drone/drone/service/commit"
|
||||
contents "github.com/drone/drone/service/content"
|
||||
"github.com/drone/drone/service/content/cache"
|
||||
"github.com/drone/drone/service/hook"
|
||||
"github.com/drone/drone/service/hook/parser"
|
||||
"github.com/drone/drone/service/linker"
|
||||
"github.com/drone/drone/service/netrc"
|
||||
orgs "github.com/drone/drone/service/org"
|
||||
"github.com/drone/drone/service/repo"
|
||||
"github.com/drone/drone/service/status"
|
||||
"github.com/drone/drone/service/syncer"
|
||||
"github.com/drone/drone/service/token"
|
||||
"github.com/drone/drone/service/transfer"
|
||||
"github.com/drone/drone/service/user"
|
||||
"github.com/drone/drone/session"
|
||||
"github.com/drone/drone/trigger"
|
||||
"github.com/drone/drone/trigger/cron"
|
||||
"github.com/drone/drone/version"
|
||||
"github.com/drone/go-scm/scm"
|
||||
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// wire set for loading the services.
|
||||
var serviceSet = wire.NewSet(
|
||||
canceler.New,
|
||||
commit.New,
|
||||
cron.New,
|
||||
livelog.New,
|
||||
linker.New,
|
||||
parser.New,
|
||||
pubsub.New,
|
||||
token.Renewer,
|
||||
transfer.New,
|
||||
trigger.New,
|
||||
user.New,
|
||||
|
||||
provideRepositoryService,
|
||||
provideContentService,
|
||||
provideDatadog,
|
||||
provideHookService,
|
||||
provideNetrcService,
|
||||
provideOrgService,
|
||||
provideReaper,
|
||||
provideSession,
|
||||
provideStatusService,
|
||||
provideSyncer,
|
||||
provideSystem,
|
||||
)
|
||||
|
||||
// provideContentService is a Wire provider function that
|
||||
// returns a contents service wrapped with a simple LRU cache.
|
||||
func provideContentService(client *scm.Client, renewer core.Renewer) core.FileService {
|
||||
return cache.Contents(
|
||||
contents.New(client, renewer),
|
||||
)
|
||||
}
|
||||
|
||||
// provideHookService is a Wire provider function that returns a
|
||||
// hook service based on the environment configuration.
|
||||
func provideHookService(client *scm.Client, renewer core.Renewer, config config.Config) core.HookService {
|
||||
return hook.New(client, config.Proxy.Addr, renewer)
|
||||
}
|
||||
|
||||
// provideNetrcService is a Wire provider function that returns
|
||||
// a netrc service based on the environment configuration.
|
||||
func provideNetrcService(client *scm.Client, renewer core.Renewer, config config.Config) core.NetrcService {
|
||||
return netrc.New(
|
||||
client,
|
||||
renewer,
|
||||
config.Cloning.AlwaysAuth,
|
||||
config.Cloning.Username,
|
||||
config.Cloning.Password,
|
||||
)
|
||||
}
|
||||
|
||||
// provideOrgService is a Wire provider function that
|
||||
// returns an organization service wrapped with a simple cache.
|
||||
func provideOrgService(client *scm.Client, renewer core.Renewer) core.OrganizationService {
|
||||
return orgs.NewCache(orgs.New(client, renewer), 10, time.Minute*5)
|
||||
}
|
||||
|
||||
// provideRepo is a Wire provider function that returns
|
||||
// a repo based on the environment configuration
|
||||
func provideRepositoryService(client *scm.Client, renewer core.Renewer, config config.Config) core.RepositoryService {
|
||||
return repo.New(
|
||||
client,
|
||||
renewer,
|
||||
config.Repository.Visibility,
|
||||
config.Repository.Trusted,
|
||||
)
|
||||
}
|
||||
|
||||
// provideSession is a Wire provider function that returns a
|
||||
// user session based on the environment configuration.
|
||||
func provideSession(store core.UserStore, config config.Config) (core.Session, error) {
|
||||
return session.New(store, session.NewConfig(
|
||||
config.Session.Secret,
|
||||
config.Session.Timeout,
|
||||
config.Session.Secure),
|
||||
), nil
|
||||
}
|
||||
|
||||
// provideUserService is a Wire provider function that returns a
|
||||
// user service based on the environment configuration.
|
||||
func provideStatusService(client *scm.Client, renewer core.Renewer, config config.Config) core.StatusService {
|
||||
return status.New(client, renewer, status.Config{
|
||||
Base: config.Server.Addr,
|
||||
Name: config.Status.Name,
|
||||
Disabled: config.Status.Disabled,
|
||||
})
|
||||
}
|
||||
|
||||
// provideSyncer is a Wire provider function that returns a
|
||||
// repository synchronizer.
|
||||
func provideSyncer(repoz core.RepositoryService,
|
||||
repos core.RepositoryStore,
|
||||
users core.UserStore,
|
||||
batch core.Batcher,
|
||||
config config.Config) core.Syncer {
|
||||
sync := syncer.New(repoz, repos, users, batch)
|
||||
// the user can define a filter that limits which
|
||||
// repositories can be synchronized and stored in the
|
||||
// database.
|
||||
if filter := config.Repository.Filter; len(filter) > 0 {
|
||||
sync.SetFilter(syncer.NamespaceFilter(filter))
|
||||
}
|
||||
return sync
|
||||
}
|
||||
|
||||
// provideSyncer is a Wire provider function that returns the
|
||||
// system details structure.
|
||||
func provideSystem(config config.Config) *core.System {
|
||||
return &core.System{
|
||||
Proto: config.Server.Proto,
|
||||
Host: config.Server.Host,
|
||||
Link: config.Server.Addr,
|
||||
Version: version.Version.String(),
|
||||
}
|
||||
}
|
||||
|
||||
// provideReaper is a Wire provider function that returns the
|
||||
// zombie build reaper.
|
||||
func provideReaper(
|
||||
repos core.RepositoryStore,
|
||||
builds core.BuildStore,
|
||||
stages core.StageStore,
|
||||
canceler core.Canceler,
|
||||
config config.Config,
|
||||
) *reaper.Reaper {
|
||||
return reaper.New(
|
||||
repos,
|
||||
builds,
|
||||
stages,
|
||||
canceler,
|
||||
config.Cleanup.Running,
|
||||
config.Cleanup.Pending,
|
||||
config.Cleanup.Buffer,
|
||||
)
|
||||
}
|
||||
|
||||
// provideDatadog is a Wire provider function that returns the
|
||||
// datadog sink.
|
||||
func provideDatadog(
|
||||
users core.UserStore,
|
||||
repos core.RepositoryStore,
|
||||
builds core.BuildStore,
|
||||
system *core.System,
|
||||
license *core.License,
|
||||
config config.Config,
|
||||
) *sink.Datadog {
|
||||
return sink.New(
|
||||
users,
|
||||
repos,
|
||||
builds,
|
||||
*system,
|
||||
sink.Config{
|
||||
Endpoint: config.Datadog.Endpoint,
|
||||
Token: config.Datadog.Token,
|
||||
License: license.Kind,
|
||||
Licensor: license.Licensor,
|
||||
Subscription: license.Subscription,
|
||||
EnableGithub: config.IsGitHub(),
|
||||
EnableGithubEnt: config.IsGitHubEnterprise(),
|
||||
EnableGitlab: config.IsGitLab(),
|
||||
EnableBitbucket: config.IsBitbucket(),
|
||||
EnableStash: config.IsStash(),
|
||||
EnableGogs: config.IsGogs(),
|
||||
EnableGitea: config.IsGitea(),
|
||||
EnableGitee: config.IsGitee(),
|
||||
EnableAgents: !config.Agent.Disabled,
|
||||
},
|
||||
)
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/metric"
|
||||
"github.com/drone/drone/store/batch"
|
||||
"github.com/drone/drone/store/batch2"
|
||||
"github.com/drone/drone/store/build"
|
||||
"github.com/drone/drone/store/card"
|
||||
"github.com/drone/drone/store/cron"
|
||||
"github.com/drone/drone/store/logs"
|
||||
"github.com/drone/drone/store/perm"
|
||||
"github.com/drone/drone/store/repos"
|
||||
"github.com/drone/drone/store/secret"
|
||||
"github.com/drone/drone/store/secret/global"
|
||||
"github.com/drone/drone/store/shared/db"
|
||||
"github.com/drone/drone/store/shared/encrypt"
|
||||
"github.com/drone/drone/store/stage"
|
||||
"github.com/drone/drone/store/step"
|
||||
"github.com/drone/drone/store/template"
|
||||
"github.com/drone/drone/store/user"
|
||||
|
||||
"github.com/google/wire"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// wire set for loading the stores.
|
||||
var storeSet = wire.NewSet(
|
||||
provideDatabase,
|
||||
provideEncrypter,
|
||||
provideBuildStore,
|
||||
provideLogStore,
|
||||
provideRepoStore,
|
||||
provideStageStore,
|
||||
provideUserStore,
|
||||
provideBatchStore,
|
||||
// batch.New,
|
||||
cron.New,
|
||||
card.New,
|
||||
perm.New,
|
||||
secret.New,
|
||||
global.New,
|
||||
step.New,
|
||||
template.New,
|
||||
)
|
||||
|
||||
// provideDatabase is a Wire provider function that provides a
|
||||
// database connection, configured from the environment.
|
||||
func provideDatabase(config config.Config) (*db.DB, error) {
|
||||
return db.Connect(
|
||||
config.Database.Driver,
|
||||
config.Database.Datasource,
|
||||
config.Database.MaxConnections,
|
||||
)
|
||||
}
|
||||
|
||||
// provideEncrypter is a Wire provider function that provides a
|
||||
// database encrypter, configured from the environment.
|
||||
func provideEncrypter(config config.Config) (encrypt.Encrypter, error) {
|
||||
enc, err := encrypt.New(config.Database.Secret)
|
||||
// mixed-content mode should be set to true if the database
|
||||
// originally had encryption disabled and therefore has
|
||||
// plaintext entries. This prevents Drone from returning an
|
||||
// error if decryption fails; on failure, the ciphertext is
|
||||
// returned as-is and the error is ignored.
|
||||
if aesgcm, ok := enc.(*encrypt.Aesgcm); ok {
|
||||
logrus.Debugln("main: database encryption enabled")
|
||||
if config.Database.EncryptMixedContent {
|
||||
logrus.Debugln("main: database encryption mixed-mode enabled")
|
||||
aesgcm.Compat = true
|
||||
}
|
||||
}
|
||||
return enc, err
|
||||
}
|
||||
|
||||
// provideBuildStore is a Wire provider function that provides a
|
||||
// build datastore, configured from the environment, with metrics
|
||||
// enabled.
|
||||
func provideBuildStore(db *db.DB) core.BuildStore {
|
||||
builds := build.New(db)
|
||||
metric.BuildCount(builds)
|
||||
metric.PendingBuildCount(builds)
|
||||
metric.RunningBuildCount(builds)
|
||||
return builds
|
||||
}
|
||||
|
||||
// provideLogStore is a Wire provider function that provides a
|
||||
// log datastore, configured from the environment.
|
||||
func provideLogStore(db *db.DB, config config.Config) core.LogStore {
|
||||
s := logs.New(db)
|
||||
if config.S3.Bucket != "" {
|
||||
p := logs.NewS3Env(
|
||||
config.S3.Bucket,
|
||||
config.S3.Prefix,
|
||||
config.S3.Endpoint,
|
||||
config.S3.PathStyle,
|
||||
)
|
||||
return logs.NewCombined(p, s)
|
||||
}
|
||||
if config.AzureBlob.ContainerName != "" {
|
||||
p := logs.NewAzureBlobEnv(
|
||||
config.AzureBlob.ContainerName,
|
||||
config.AzureBlob.StorageAccountName,
|
||||
config.AzureBlob.StorageAccessKey,
|
||||
)
|
||||
return logs.NewCombined(p, s)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// provideStageStore is a Wire provider function that provides a
|
||||
// stage datastore, configured from the environment, with metrics
|
||||
// enabled.
|
||||
func provideStageStore(db *db.DB) core.StageStore {
|
||||
stages := stage.New(db)
|
||||
metric.PendingJobCount(stages)
|
||||
metric.RunningJobCount(stages)
|
||||
return stages
|
||||
}
|
||||
|
||||
// provideRepoStore is a Wire provider function that provides a
|
||||
// user datastore, configured from the environment, with metrics
|
||||
// enabled.
|
||||
func provideRepoStore(db *db.DB) core.RepositoryStore {
|
||||
repos := repos.New(db)
|
||||
metric.RepoCount(repos)
|
||||
return repos
|
||||
}
|
||||
|
||||
// provideBatchStore is a Wire provider function that provides a
|
||||
// batcher. If the experimental batcher is enabled it is returned.
|
||||
func provideBatchStore(db *db.DB, config config.Config) core.Batcher {
|
||||
if config.Database.LegacyBatch {
|
||||
return batch.New(db)
|
||||
}
|
||||
return batch2.New(db)
|
||||
}
|
||||
|
||||
// provideUserStore is a Wire provider function that provides a
|
||||
// user datastore, configured from the environment, with metrics
|
||||
// enabled.
|
||||
func provideUserStore(db *db.DB, enc encrypt.Encrypter, config config.Config) core.UserStore {
|
||||
// create the user store with encryption iff the user
|
||||
// encryption feature flag is enabled.
|
||||
//
|
||||
// why not enable by default? because the user table is
|
||||
// accessed on every http request and we are unsure what,
|
||||
// if any performance implications user table encryption
|
||||
// may have on the system.
|
||||
//
|
||||
// it is very possible there are zero material performance
|
||||
// implications, however, if there is a performance regression
|
||||
// we could look at implementing in-memory lru caching, which
|
||||
// we already employ in other areas of the software.
|
||||
if config.Database.EncryptUserTable {
|
||||
logrus.Debugln("main: database encryption enabled for user table")
|
||||
users := user.New(db, enc)
|
||||
metric.UserCount(users)
|
||||
return users
|
||||
}
|
||||
|
||||
noenc, _ := encrypt.New("")
|
||||
users := user.New(db, noenc)
|
||||
metric.UserCount(users)
|
||||
return users
|
||||
}
|
@ -1,193 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"github.com/drone/drone/cmd/drone-server/bootstrap"
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/core"
|
||||
"github.com/drone/drone/metric/sink"
|
||||
"github.com/drone/drone/operator/runner"
|
||||
"github.com/drone/drone/service/canceler/reaper"
|
||||
"github.com/drone/drone/server"
|
||||
"github.com/drone/drone/trigger/cron"
|
||||
"github.com/drone/signal"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/sirupsen/logrus"
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
_ "github.com/lib/pq"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var envfile string
|
||||
flag.StringVar(&envfile, "env-file", ".env", "Read in a file of environment variables")
|
||||
flag.Parse()
|
||||
|
||||
godotenv.Load(envfile)
|
||||
config, err := config.Environ()
|
||||
if err != nil {
|
||||
logger := logrus.WithError(err)
|
||||
logger.Fatalln("main: invalid configuration")
|
||||
}
|
||||
|
||||
initLogging(config)
|
||||
ctx := signal.WithContext(
|
||||
context.Background(),
|
||||
)
|
||||
|
||||
// if trace level logging is enabled, output the
|
||||
// configuration parameters.
|
||||
if logrus.IsLevelEnabled(logrus.TraceLevel) {
|
||||
fmt.Println(config.String())
|
||||
}
|
||||
|
||||
app, err := InitializeApplication(config)
|
||||
if err != nil {
|
||||
logger := logrus.WithError(err)
|
||||
logger.Fatalln("main: cannot initialize server")
|
||||
}
|
||||
|
||||
// optionally bootstrap the system with administrative or
|
||||
// machine users configured in the environment.
|
||||
err = bootstrap.New(app.users).Bootstrap(ctx, &core.User{
|
||||
Login: config.Users.Create.Username,
|
||||
Machine: config.Users.Create.Machine,
|
||||
Admin: config.Users.Create.Admin,
|
||||
Hash: config.Users.Create.Token,
|
||||
})
|
||||
if err != nil {
|
||||
logger := logrus.WithError(err)
|
||||
logger.Fatalln("cannot bootstrap user account")
|
||||
}
|
||||
|
||||
g := errgroup.Group{}
|
||||
g.Go(func() error {
|
||||
logrus.WithFields(
|
||||
logrus.Fields{
|
||||
"proto": config.Server.Proto,
|
||||
"host": config.Server.Host,
|
||||
"port": config.Server.Port,
|
||||
"url": config.Server.Addr,
|
||||
"acme": config.Server.Acme,
|
||||
},
|
||||
).Infoln("starting the http server")
|
||||
return app.server.ListenAndServe(ctx)
|
||||
})
|
||||
|
||||
// launches the datadog sink in a goroutine. If the sink
|
||||
// is disabled, the goroutine exits immediately without error.
|
||||
g.Go(func() (err error) {
|
||||
if !config.Datadog.Enabled {
|
||||
return nil
|
||||
}
|
||||
return app.sink.Start(ctx)
|
||||
})
|
||||
|
||||
// launches the cron runner in a goroutine. If the cron
|
||||
// runner is disabled, the goroutine exits immediately
|
||||
// without error.
|
||||
g.Go(func() (err error) {
|
||||
if config.Cron.Disabled {
|
||||
return nil
|
||||
}
|
||||
logrus.WithField("interval", config.Cron.Interval.String()).
|
||||
Infoln("starting the cron scheduler")
|
||||
return app.cron.Start(ctx, config.Cron.Interval)
|
||||
})
|
||||
|
||||
// launches the reaper in a goroutine. If the reaper
|
||||
// is disabled, the goroutine exits immediately
|
||||
// without error.
|
||||
g.Go(func() (err error) {
|
||||
if config.Cleanup.Disabled {
|
||||
return nil
|
||||
}
|
||||
logrus.WithField("interval", config.Cleanup.Interval.String()).
|
||||
Infoln("starting the zombie build reaper")
|
||||
return app.reaper.Start(ctx, config.Cleanup.Interval)
|
||||
})
|
||||
|
||||
// launches the build runner in a goroutine. If the local
|
||||
// runner is disabled (because nomad or kubernetes is enabled)
|
||||
// then the goroutine exits immediately without error.
|
||||
g.Go(func() (err error) {
|
||||
if app.runner == nil {
|
||||
return nil
|
||||
}
|
||||
logrus.WithField("threads", config.Runner.Capacity).
|
||||
Infoln("main: starting the local build runner")
|
||||
return app.runner.Start(ctx, config.Runner.Capacity)
|
||||
})
|
||||
|
||||
if err := g.Wait(); err != nil {
|
||||
logrus.WithError(err).Fatalln("program terminated")
|
||||
}
|
||||
}
|
||||
|
||||
// helper function configures the logging.
|
||||
func initLogging(c config.Config) {
|
||||
if c.Logging.Debug {
|
||||
logrus.SetLevel(logrus.DebugLevel)
|
||||
}
|
||||
if c.Logging.Trace {
|
||||
logrus.SetLevel(logrus.TraceLevel)
|
||||
}
|
||||
if c.Logging.Text {
|
||||
logrus.SetFormatter(&logrus.TextFormatter{
|
||||
ForceColors: c.Logging.Color,
|
||||
DisableColors: !c.Logging.Color,
|
||||
})
|
||||
} else {
|
||||
logrus.SetFormatter(&logrus.JSONFormatter{
|
||||
PrettyPrint: c.Logging.Pretty,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// application is the main struct for the Drone server.
|
||||
type application struct {
|
||||
cron *cron.Scheduler
|
||||
reaper *reaper.Reaper
|
||||
sink *sink.Datadog
|
||||
runner *runner.Runner
|
||||
server *server.Server
|
||||
users core.UserStore
|
||||
}
|
||||
|
||||
// newApplication creates a new application struct.
|
||||
func newApplication(
|
||||
cron *cron.Scheduler,
|
||||
reaper *reaper.Reaper,
|
||||
sink *sink.Datadog,
|
||||
runner *runner.Runner,
|
||||
server *server.Server,
|
||||
users core.UserStore) application {
|
||||
return application{
|
||||
users: users,
|
||||
cron: cron,
|
||||
sink: sink,
|
||||
server: server,
|
||||
runner: runner,
|
||||
reaper: reaper,
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//+build wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
func InitializeApplication(config config.Config) (application, error) {
|
||||
wire.Build(
|
||||
clientSet,
|
||||
licenseSet,
|
||||
loginSet,
|
||||
pluginSet,
|
||||
runnerSet,
|
||||
schedulerSet,
|
||||
serverSet,
|
||||
serviceSet,
|
||||
storeSet,
|
||||
externalSet,
|
||||
newApplication,
|
||||
)
|
||||
return application{}, nil
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate wire
|
||||
//+build !wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/cmd/drone-server/config"
|
||||
"github.com/drone/drone/handler/api"
|
||||
"github.com/drone/drone/handler/web"
|
||||
"github.com/drone/drone/livelog"
|
||||
"github.com/drone/drone/operator/manager"
|
||||
"github.com/drone/drone/pubsub"
|
||||
"github.com/drone/drone/service/canceler"
|
||||
"github.com/drone/drone/service/commit"
|
||||
"github.com/drone/drone/service/hook/parser"
|
||||
"github.com/drone/drone/service/license"
|
||||
"github.com/drone/drone/service/linker"
|
||||
"github.com/drone/drone/service/token"
|
||||
"github.com/drone/drone/service/transfer"
|
||||
"github.com/drone/drone/service/user"
|
||||
"github.com/drone/drone/store/card"
|
||||
"github.com/drone/drone/store/cron"
|
||||
"github.com/drone/drone/store/perm"
|
||||
"github.com/drone/drone/store/secret"
|
||||
"github.com/drone/drone/store/secret/global"
|
||||
"github.com/drone/drone/store/step"
|
||||
"github.com/drone/drone/store/template"
|
||||
"github.com/drone/drone/trigger"
|
||||
cron2 "github.com/drone/drone/trigger/cron"
|
||||
)
|
||||
|
||||
import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
_ "github.com/lib/pq"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
func InitializeApplication(config2 config.Config) (application, error) {
|
||||
client := provideClient(config2)
|
||||
refresher := provideRefresher(config2)
|
||||
db, err := provideDatabase(config2)
|
||||
if err != nil {
|
||||
return application{}, err
|
||||
}
|
||||
encrypter, err := provideEncrypter(config2)
|
||||
if err != nil {
|
||||
return application{}, err
|
||||
}
|
||||
userStore := provideUserStore(db, encrypter, config2)
|
||||
renewer := token.Renewer(refresher, userStore)
|
||||
commitService := commit.New(client, renewer)
|
||||
cronStore := cron.New(db)
|
||||
repositoryStore := provideRepoStore(db)
|
||||
buildStore := provideBuildStore(db)
|
||||
redisDB, err := provideRedisClient(config2)
|
||||
if err != nil {
|
||||
return application{}, err
|
||||
}
|
||||
corePubsub := pubsub.New(redisDB)
|
||||
stageStore := provideStageStore(db)
|
||||
scheduler := provideScheduler(stageStore, redisDB)
|
||||
statusService := provideStatusService(client, renewer, config2)
|
||||
stepStore := step.New(db)
|
||||
system := provideSystem(config2)
|
||||
webhookSender := provideWebhookPlugin(config2, system)
|
||||
coreCanceler := canceler.New(buildStore, corePubsub, repositoryStore, scheduler, stageStore, statusService, stepStore, userStore, webhookSender)
|
||||
fileService := provideContentService(client, renewer)
|
||||
configService := provideConfigPlugin(client, fileService, config2)
|
||||
templateStore := template.New(db)
|
||||
convertService := provideConvertPlugin(client, fileService, config2, templateStore)
|
||||
validateService := provideValidatePlugin(config2)
|
||||
triggerer := trigger.New(coreCanceler, configService, convertService, commitService, statusService, buildStore, scheduler, repositoryStore, userStore, validateService, webhookSender)
|
||||
cronScheduler := cron2.New(commitService, cronStore, repositoryStore, userStore, triggerer)
|
||||
reaper := provideReaper(repositoryStore, buildStore, stageStore, coreCanceler, config2)
|
||||
coreLicense := provideLicense(client, config2)
|
||||
datadog := provideDatadog(userStore, repositoryStore, buildStore, system, coreLicense, config2)
|
||||
cardStore := card.New(db)
|
||||
logStore := provideLogStore(db, config2)
|
||||
logStream := livelog.New(redisDB)
|
||||
netrcService := provideNetrcService(client, renewer, config2)
|
||||
secretStore := secret.New(db, encrypter)
|
||||
globalSecretStore := global.New(db, encrypter)
|
||||
buildManager := manager.New(buildStore, cardStore, configService, convertService, corePubsub, logStore, logStream, netrcService, repositoryStore, scheduler, secretStore, globalSecretStore, statusService, stageStore, stepStore, system, userStore, webhookSender)
|
||||
secretService := provideSecretPlugin(config2)
|
||||
registryService := provideRegistryPlugin(config2)
|
||||
runner := provideRunner(buildManager, secretService, registryService, config2)
|
||||
hookService := provideHookService(client, renewer, config2)
|
||||
licenseService := license.NewService(userStore, repositoryStore, buildStore, coreLicense)
|
||||
organizationService := provideOrgService(client, renewer)
|
||||
permStore := perm.New(db)
|
||||
repositoryService := provideRepositoryService(client, renewer, config2)
|
||||
session, err := provideSession(userStore, config2)
|
||||
if err != nil {
|
||||
return application{}, err
|
||||
}
|
||||
batcher := provideBatchStore(db, config2)
|
||||
syncer := provideSyncer(repositoryService, repositoryStore, userStore, batcher, config2)
|
||||
transferer := transfer.New(repositoryStore, permStore)
|
||||
userService := user.New(client, renewer)
|
||||
server := api.New(buildStore, commitService, cardStore, cronStore, corePubsub, globalSecretStore, hookService, logStore, coreLicense, licenseService, organizationService, permStore, repositoryStore, repositoryService, scheduler, secretStore, stageStore, stepStore, statusService, session, logStream, syncer, system, templateStore, transferer, triggerer, userStore, userService, webhookSender)
|
||||
admissionService := provideAdmissionPlugin(client, organizationService, userService, config2)
|
||||
hookParser := parser.New(client)
|
||||
coreLinker := linker.New(client)
|
||||
middleware := provideLogin(config2)
|
||||
options := provideServerOptions(config2)
|
||||
webServer := web.New(admissionService, buildStore, client, hookParser, coreLicense, licenseService, coreLinker, middleware, repositoryStore, session, syncer, triggerer, userStore, userService, webhookSender, options, system)
|
||||
mainRpcHandlerV1 := provideRPC(buildManager, config2)
|
||||
mainRpcHandlerV2 := provideRPC2(buildManager, config2)
|
||||
mainHealthzHandler := provideHealthz()
|
||||
metricServer := provideMetric(session, config2)
|
||||
mainPprofHandler := providePprof(config2)
|
||||
mux := provideRouter(server, webServer, mainRpcHandlerV1, mainRpcHandlerV2, mainHealthzHandler, metricServer, mainPprofHandler)
|
||||
serverServer := provideServer(mux, config2)
|
||||
mainApplication := newApplication(cronScheduler, reaper, datadog, runner, serverServer, userStore)
|
||||
return mainApplication, nil
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// AdmissionService grants access to the system. The service can
|
||||
// be used to restrict access to authorized users, such as
|
||||
// members of an organization in your source control management
|
||||
// system.
|
||||
type AdmissionService interface {
|
||||
Admit(context.Context, *User) error
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Batch represents a Batch request to synchronize the local
|
||||
// repository and permission store for a user account.
|
||||
type Batch struct {
|
||||
Insert []*Repository `json:"insert"`
|
||||
Update []*Repository `json:"update"`
|
||||
Rename []*Repository `json:"rename"`
|
||||
Revoke []*Repository `json:"revoke"`
|
||||
}
|
||||
|
||||
// Batcher batch updates the user account.
|
||||
type Batcher interface {
|
||||
Batch(context.Context, *User, *Batch) error
|
||||
}
|
143
core/build.go
143
core/build.go
@ -1,143 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Build represents a build execution.
|
||||
type Build struct {
|
||||
ID int64 `db:"build_id" json:"id"`
|
||||
RepoID int64 `db:"build_repo_id" json:"repo_id"`
|
||||
Trigger string `db:"build_trigger" json:"trigger"`
|
||||
Number int64 `db:"build_number" json:"number"`
|
||||
Parent int64 `db:"build_parent" json:"parent,omitempty"`
|
||||
Status string `db:"build_status" json:"status"`
|
||||
Error string `db:"build_error" json:"error,omitempty"`
|
||||
Event string `db:"build_event" json:"event"`
|
||||
Action string `db:"build_action" json:"action"`
|
||||
Link string `db:"build_link" json:"link"`
|
||||
Timestamp int64 `db:"build_timestamp" json:"timestamp"`
|
||||
Title string `db:"build_title" json:"title,omitempty"`
|
||||
Message string `db:"build_message" json:"message"`
|
||||
Before string `db:"build_before" json:"before"`
|
||||
After string `db:"build_after" json:"after"`
|
||||
Ref string `db:"build_ref" json:"ref"`
|
||||
Fork string `db:"build_source_repo" json:"source_repo"`
|
||||
Source string `db:"build_source" json:"source"`
|
||||
Target string `db:"build_target" json:"target"`
|
||||
Author string `db:"build_author" json:"author_login"`
|
||||
AuthorName string `db:"build_author_name" json:"author_name"`
|
||||
AuthorEmail string `db:"build_author_email" json:"author_email"`
|
||||
AuthorAvatar string `db:"build_author_avatar" json:"author_avatar"`
|
||||
Sender string `db:"build_sender" json:"sender"`
|
||||
Params map[string]string `db:"build_params" json:"params,omitempty"`
|
||||
Cron string `db:"build_cron" json:"cron,omitempty"`
|
||||
Deploy string `db:"build_deploy" json:"deploy_to,omitempty"`
|
||||
DeployID int64 `db:"build_deploy_id" json:"deploy_id,omitempty"`
|
||||
Debug bool `db:"build_debug" json:"debug,omitempty"`
|
||||
Started int64 `db:"build_started" json:"started"`
|
||||
Finished int64 `db:"build_finished" json:"finished"`
|
||||
Created int64 `db:"build_created" json:"created"`
|
||||
Updated int64 `db:"build_updated" json:"updated"`
|
||||
Version int64 `db:"build_version" json:"version"`
|
||||
Stages []*Stage `db:"-" json:"stages,omitempty"`
|
||||
}
|
||||
|
||||
// BuildStore defines operations for working with builds.
|
||||
type BuildStore interface {
|
||||
// Find returns a build from the datastore.
|
||||
Find(context.Context, int64) (*Build, error)
|
||||
|
||||
// FindNumber returns a build from the datastore by build number.
|
||||
FindNumber(context.Context, int64, int64) (*Build, error)
|
||||
|
||||
// FindLast returns the last build from the datastore by ref.
|
||||
FindRef(context.Context, int64, string) (*Build, error)
|
||||
|
||||
// List returns a list of builds from the datastore by repository id.
|
||||
List(context.Context, int64, int, int) ([]*Build, error)
|
||||
|
||||
// ListRef returns a list of builds from the datastore by ref.
|
||||
ListRef(context.Context, int64, string, int, int) ([]*Build, error)
|
||||
|
||||
// LatestBranches returns the latest builds from the
|
||||
// datastore by branch.
|
||||
LatestBranches(context.Context, int64) ([]*Build, error)
|
||||
|
||||
// LatestPulls returns the latest builds from the
|
||||
// datastore by pull request.
|
||||
LatestPulls(context.Context, int64) ([]*Build, error)
|
||||
|
||||
// LatestDeploys returns the latest builds from the
|
||||
// datastore by deployment target.
|
||||
LatestDeploys(context.Context, int64) ([]*Build, error)
|
||||
|
||||
// Pending returns a list of pending builds from the
|
||||
// datastore by repository id (DEPRECATED).
|
||||
Pending(context.Context) ([]*Build, error)
|
||||
|
||||
// Running returns a list of running builds from the
|
||||
// datastore by repository id (DEPRECATED).
|
||||
Running(context.Context) ([]*Build, error)
|
||||
|
||||
// Create persists a build to the datastore.
|
||||
Create(context.Context, *Build, []*Stage) error
|
||||
|
||||
// Update updates a build in the datastore.
|
||||
Update(context.Context, *Build) error
|
||||
|
||||
// Delete deletes a build from the datastore.
|
||||
Delete(context.Context, *Build) error
|
||||
|
||||
// DeletePull deletes a pull request index from the datastore.
|
||||
DeletePull(context.Context, int64, int) error
|
||||
|
||||
// DeleteBranch deletes a branch index from the datastore.
|
||||
DeleteBranch(context.Context, int64, string) error
|
||||
|
||||
// DeleteDeploy deletes a deploy index from the datastore.
|
||||
DeleteDeploy(context.Context, int64, string) error
|
||||
|
||||
// Purge deletes builds from the database where the build number is less than n.
|
||||
Purge(context.Context, int64, int64) error
|
||||
|
||||
// Count returns a count of builds.
|
||||
Count(context.Context) (int64, error)
|
||||
}
|
||||
|
||||
// IsDone returns true if the build has a completed state.
|
||||
func (b *Build) IsDone() bool {
|
||||
switch b.Status {
|
||||
case StatusWaiting,
|
||||
StatusPending,
|
||||
StatusRunning,
|
||||
StatusBlocked:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// IsFailed returns true if the build has failed
|
||||
func (b *Build) IsFailed() bool {
|
||||
switch b.Status {
|
||||
case StatusFailing,
|
||||
StatusKilled,
|
||||
StatusError:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
@ -1,27 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Canceler cancels a build.
|
||||
type Canceler interface {
|
||||
// Cancel cancels the provided build.
|
||||
Cancel(context.Context, *Repository, *Build) error
|
||||
|
||||
// CancelPending cancels all pending builds of the same
|
||||
// type of as the provided build.
|
||||
CancelPending(context.Context, *Repository, *Build) error
|
||||
}
|
41
core/card.go
41
core/card.go
@ -1,41 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io"
|
||||
)
|
||||
|
||||
type CardInput struct {
|
||||
Schema string `json:"schema"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
// CardStore manages repository cards.
|
||||
type CardStore interface {
|
||||
// Find returns a card data stream from the datastore.
|
||||
Find(ctx context.Context, step int64) (io.ReadCloser, error)
|
||||
|
||||
// Create copies the card stream from Reader r to the datastore.
|
||||
Create(ctx context.Context, step int64, r io.Reader) error
|
||||
|
||||
// Update copies the card stream from Reader r to the datastore.
|
||||
Update(ctx context.Context, step int64, r io.Reader) error
|
||||
|
||||
// Delete purges the card data from the datastore.
|
||||
Delete(ctx context.Context, step int64) error
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// Commit represents a git commit.
|
||||
Commit struct {
|
||||
Sha string
|
||||
Ref string
|
||||
Message string
|
||||
Author *Committer
|
||||
Committer *Committer
|
||||
Link string
|
||||
}
|
||||
|
||||
// Committer represents the commit author.
|
||||
Committer struct {
|
||||
Name string
|
||||
Email string
|
||||
Date int64
|
||||
Login string
|
||||
Avatar string
|
||||
}
|
||||
|
||||
// Change represents a file change in a commit.
|
||||
Change struct {
|
||||
Path string
|
||||
Added bool
|
||||
Renamed bool
|
||||
Deleted bool
|
||||
}
|
||||
|
||||
// CommitService provides access to the commit history from
|
||||
// the external source code management service (e.g. GitHub).
|
||||
CommitService interface {
|
||||
// Find returns the commit information by sha.
|
||||
Find(ctx context.Context, user *User, repo, sha string) (*Commit, error)
|
||||
|
||||
// FindRef returns the commit information by reference.
|
||||
FindRef(ctx context.Context, user *User, repo, ref string) (*Commit, error)
|
||||
|
||||
// ListChanges returns the files change by sha or reference.
|
||||
ListChanges(ctx context.Context, user *User, repo, sha, ref string) ([]*Change, error)
|
||||
}
|
||||
)
|
@ -1,40 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// Config represents a pipeline config file.
|
||||
Config struct {
|
||||
Data string `json:"data"`
|
||||
Kind string `json:"kind"`
|
||||
}
|
||||
|
||||
// ConfigArgs represents a request for the pipeline
|
||||
// configuration file (e.g. .drone.yml)
|
||||
ConfigArgs struct {
|
||||
User *User `json:"-"`
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Config *Config `json:"config,omitempty"`
|
||||
}
|
||||
|
||||
// ConfigService provides pipeline configuration from an
|
||||
// external service.
|
||||
ConfigService interface {
|
||||
Find(context.Context, *ConfigArgs) (*Config, error)
|
||||
}
|
||||
)
|
@ -1,35 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// ConvertArgs represents a request to the pipeline
|
||||
// conversion service.
|
||||
ConvertArgs struct {
|
||||
User *User `json:"-"`
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Config *Config `json:"config,omitempty"`
|
||||
}
|
||||
|
||||
// ConvertService converts non-native pipeline
|
||||
// configuration formats to native configuration
|
||||
// formats (e.g. jsonnet to yaml).
|
||||
ConvertService interface {
|
||||
Convert(context.Context, *ConvertArgs) (*Config, error)
|
||||
}
|
||||
)
|
117
core/cron.go
117
core/cron.go
@ -1,117 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/gosimple/slug"
|
||||
"github.com/robfig/cron"
|
||||
)
|
||||
|
||||
var (
|
||||
errCronExprInvalid = errors.New("Invalid Cronjob Expression")
|
||||
errCronNameInvalid = errors.New("Invalid Cronjob Name")
|
||||
errCronBranchInvalid = errors.New("Invalid Cronjob Branch")
|
||||
)
|
||||
|
||||
type (
|
||||
// Cron defines a cron job.
|
||||
Cron struct {
|
||||
ID int64 `json:"id"`
|
||||
RepoID int64 `json:"repo_id"`
|
||||
Name string `json:"name"`
|
||||
Expr string `json:"expr"`
|
||||
Next int64 `json:"next"`
|
||||
Prev int64 `json:"prev"`
|
||||
Event string `json:"event"`
|
||||
Branch string `json:"branch"`
|
||||
Target string `json:"target,omitempty"`
|
||||
Disabled bool `json:"disabled"`
|
||||
Created int64 `json:"created"`
|
||||
Updated int64 `json:"updated"`
|
||||
Version int64 `json:"version"`
|
||||
}
|
||||
|
||||
// CronStore persists cron information to storage.
|
||||
CronStore interface {
|
||||
// List returns a cron list from the datastore.
|
||||
List(context.Context, int64) ([]*Cron, error)
|
||||
|
||||
// Ready returns a cron list from the datastore ready for execution.
|
||||
Ready(context.Context, int64) ([]*Cron, error)
|
||||
|
||||
// Find returns a cron job from the datastore.
|
||||
Find(context.Context, int64) (*Cron, error)
|
||||
|
||||
// FindName returns a cron job from the datastore.
|
||||
FindName(context.Context, int64, string) (*Cron, error)
|
||||
|
||||
// Create persists a new cron job to the datastore.
|
||||
Create(context.Context, *Cron) error
|
||||
|
||||
// Update persists an updated cron job to the datastore.
|
||||
Update(context.Context, *Cron) error
|
||||
|
||||
// Delete deletes a cron job from the datastore.
|
||||
Delete(context.Context, *Cron) error
|
||||
}
|
||||
)
|
||||
|
||||
// Validate validates the required fields and formats.
|
||||
func (c *Cron) Validate() error {
|
||||
_, err := cron.Parse(c.Expr)
|
||||
if err != nil {
|
||||
return errCronExprInvalid
|
||||
}
|
||||
switch {
|
||||
case c.Name == "":
|
||||
return errCronNameInvalid
|
||||
case c.Name != slug.Make(c.Name):
|
||||
return errCronNameInvalid
|
||||
case c.Branch == "":
|
||||
return errCronBranchInvalid
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// SetExpr sets the cron expression name and updates
|
||||
// the next execution date.
|
||||
func (c *Cron) SetExpr(expr string) error {
|
||||
_, err := cron.Parse(expr)
|
||||
if err != nil {
|
||||
return errCronExprInvalid
|
||||
}
|
||||
c.Expr = expr
|
||||
return c.Update()
|
||||
}
|
||||
|
||||
// SetName sets the cronjob name.
|
||||
func (c *Cron) SetName(name string) {
|
||||
c.Name = slug.Make(name)
|
||||
}
|
||||
|
||||
// Update updates the next Cron execution date.
|
||||
func (c *Cron) Update() error {
|
||||
sched, err := cron.Parse(c.Expr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.Next = sched.Next(time.Now()).Unix()
|
||||
return nil
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
@ -1,26 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
// Hook event constants.
|
||||
const (
|
||||
EventCron = "cron"
|
||||
EventCustom = "custom"
|
||||
EventPush = "push"
|
||||
EventPullRequest = "pull_request"
|
||||
EventTag = "tag"
|
||||
EventPromote = "promote"
|
||||
EventRollback = "rollback"
|
||||
)
|
40
core/file.go
40
core/file.go
@ -1,40 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// File represents the raw file contents in the remote
|
||||
// version control system.
|
||||
File struct {
|
||||
Data []byte
|
||||
Hash []byte
|
||||
}
|
||||
|
||||
// FileArgs provides repository and commit details required
|
||||
// to fetch the file from the remote source code management
|
||||
// service.
|
||||
FileArgs struct {
|
||||
Commit string
|
||||
Ref string
|
||||
}
|
||||
|
||||
// FileService provides access to contents of files in
|
||||
// the remote source code management service (e.g. GitHub).
|
||||
FileService interface {
|
||||
Find(ctx context.Context, user *User, repo, commit, ref, path string) (*File, error)
|
||||
}
|
||||
)
|
70
core/hook.go
70
core/hook.go
@ -1,70 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// Hook action constants.
|
||||
const (
|
||||
ActionOpen = "open"
|
||||
ActionClose = "close"
|
||||
ActionCreate = "create"
|
||||
ActionDelete = "delete"
|
||||
ActionSync = "sync"
|
||||
)
|
||||
|
||||
// Hook represents the payload of a post-commit hook.
|
||||
type Hook struct {
|
||||
Parent int64 `json:"parent"`
|
||||
Trigger string `json:"trigger"`
|
||||
Event string `json:"event"`
|
||||
Action string `json:"action"`
|
||||
Link string `json:"link"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Title string `json:"title"`
|
||||
Message string `json:"message"`
|
||||
Before string `json:"before"`
|
||||
After string `json:"after"`
|
||||
Ref string `json:"ref"`
|
||||
Fork string `json:"hook"`
|
||||
Source string `json:"source"`
|
||||
Target string `json:"target"`
|
||||
Author string `json:"author_login"`
|
||||
AuthorName string `json:"author_name"`
|
||||
AuthorEmail string `json:"author_email"`
|
||||
AuthorAvatar string `json:"author_avatar"`
|
||||
Deployment string `json:"deploy_to"`
|
||||
DeploymentID int64 `json:"deploy_id"`
|
||||
Debug bool `json:"debug"`
|
||||
Cron string `json:"cron"`
|
||||
Sender string `json:"sender"`
|
||||
Params map[string]string `json:"params"`
|
||||
}
|
||||
|
||||
// HookService manages post-commit hooks in the external
|
||||
// source code management service (e.g. GitHub).
|
||||
type HookService interface {
|
||||
Create(ctx context.Context, user *User, repo *Repository) error
|
||||
Delete(ctx context.Context, user *User, repo *Repository) error
|
||||
}
|
||||
|
||||
// HookParser parses a post-commit hook from the source
|
||||
// code management system, and returns normalized data.
|
||||
type HookParser interface {
|
||||
Parse(req *http.Request, secretFunc func(string) string) (*Hook, *Repository, error)
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
@ -1,75 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
// License types.
|
||||
const (
|
||||
LicenseFoss = "foss"
|
||||
LicenseFree = "free"
|
||||
LicensePersonal = "personal"
|
||||
LicenseStandard = "standard"
|
||||
LicenseTrial = "trial"
|
||||
)
|
||||
|
||||
// ErrUserLimit is returned when attempting to create a new
|
||||
// user but the maximum number of allowed user accounts
|
||||
// is exceeded.
|
||||
var ErrUserLimit = errors.New("User limit exceeded")
|
||||
|
||||
// ErrRepoLimit is returned when attempting to create a new
|
||||
// repository but the maximum number of allowed repositories
|
||||
// is exceeded.
|
||||
var ErrRepoLimit = errors.New("Repository limit exceeded")
|
||||
|
||||
// ErrBuildLimit is returned when attempting to create a new
|
||||
// build but the maximum number of allowed builds is exceeded.
|
||||
var ErrBuildLimit = errors.New("Build limit exceeded")
|
||||
|
||||
type (
|
||||
// License defines software license parameters.
|
||||
License struct {
|
||||
Licensor string `json:"-"`
|
||||
Subscription string `json:"-"`
|
||||
Expires time.Time `json:"expires_at,omitempty"`
|
||||
Kind string `json:"kind,omitempty"`
|
||||
Repos int64 `json:"repos,omitempty"`
|
||||
Users int64 `json:"users,omitempty"`
|
||||
Builds int64 `json:"builds,omitempty"`
|
||||
Nodes int64 `json:"nodes,omitempty"`
|
||||
}
|
||||
|
||||
// LicenseService provides access to the license
|
||||
// service and can be used to check for violations
|
||||
// and expirations.
|
||||
LicenseService interface {
|
||||
// Exceeded returns true if the system has exceeded
|
||||
// its limits as defined in the license.
|
||||
Exceeded(context.Context) (bool, error)
|
||||
|
||||
// Expired returns true if the license is expired.
|
||||
Expired(context.Context) bool
|
||||
}
|
||||
)
|
||||
|
||||
// Expired returns true if the license is expired.
|
||||
func (l *License) Expired() bool {
|
||||
return l.Expires.IsZero() == false && time.Now().After(l.Expires)
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
@ -1,23 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Linker provides a deep link to a git resource in the
|
||||
// source control management system for a given build.
|
||||
type Linker interface {
|
||||
Link(ctx context.Context, repo, ref, sha string) (string, error)
|
||||
}
|
70
core/logs.go
70
core/logs.go
@ -1,70 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
)
|
||||
|
||||
// Line represents a line in the logs.
|
||||
type Line struct {
|
||||
Number int `json:"pos"`
|
||||
Message string `json:"out"`
|
||||
Timestamp int64 `json:"time"`
|
||||
}
|
||||
|
||||
// LogStore persists build output to storage.
|
||||
type LogStore interface {
|
||||
// Find returns a log stream from the datastore.
|
||||
Find(ctx context.Context, stage int64) (io.ReadCloser, error)
|
||||
|
||||
// Create writes copies the log stream from Reader r to the datastore.
|
||||
Create(ctx context.Context, stage int64, r io.Reader) error
|
||||
|
||||
// Update writes copies the log stream from Reader r to the datastore.
|
||||
Update(ctx context.Context, stage int64, r io.Reader) error
|
||||
|
||||
// Delete purges the log stream from the datastore.
|
||||
Delete(ctx context.Context, stage int64) error
|
||||
}
|
||||
|
||||
// LogStream manages a live stream of logs.
|
||||
type LogStream interface {
|
||||
// Create creates the log stream for the step ID.
|
||||
Create(context.Context, int64) error
|
||||
|
||||
// Delete deletes the log stream for the step ID.
|
||||
Delete(context.Context, int64) error
|
||||
|
||||
// Writes writes to the log stream.
|
||||
Write(context.Context, int64, *Line) error
|
||||
|
||||
// Tail tails the log stream.
|
||||
Tail(context.Context, int64) (<-chan *Line, <-chan error)
|
||||
|
||||
// Info returns internal stream information.
|
||||
Info(context.Context) *LogStreamInfo
|
||||
}
|
||||
|
||||
// LogStreamInfo provides internal stream information. This can
|
||||
// be used to monitor the number of registered streams and
|
||||
// subscribers.
|
||||
type LogStreamInfo struct {
|
||||
// Streams is a key-value pair where the key is the step
|
||||
// identifier, and the value is the count of subscribers
|
||||
// streaming the logs.
|
||||
Streams map[int64]int `json:"streams"`
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type (
|
||||
// Netrc contains login and initialization information used by
|
||||
// an automated login process.
|
||||
Netrc struct {
|
||||
Machine string `json:"machine"`
|
||||
Login string `json:"login"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
// NetrcService returns a valid netrc file that can be used
|
||||
// to authenticate and clone a private repository. If
|
||||
// authentication is not required or enabled, a nil Netrc
|
||||
// file and nil error are returned.
|
||||
NetrcService interface {
|
||||
Create(context.Context, *User, *Repository) (*Netrc, error)
|
||||
}
|
||||
)
|
||||
|
||||
// SetMachine sets the netrc machine from a URL value.
|
||||
func (n *Netrc) SetMachine(address string) error {
|
||||
url, err := url.Parse(address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n.Machine = url.Hostname()
|
||||
return nil
|
||||
}
|
||||
|
||||
// String returns the string representation of a netrc file.
|
||||
func (n *Netrc) String() string {
|
||||
return fmt.Sprintf("machine %s login %s password %s",
|
||||
n.Machine,
|
||||
n.Login,
|
||||
n.Password,
|
||||
)
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
38
core/org.go
38
core/org.go
@ -1,38 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Organization represents an organization in the source
|
||||
// code management system (e.g. GitHub).
|
||||
type Organization struct {
|
||||
Name string
|
||||
Avatar string
|
||||
}
|
||||
|
||||
// OrganizationService provides access to organization and
|
||||
// team access in the external source code management system
|
||||
// (e.g. GitHub).
|
||||
type OrganizationService interface {
|
||||
// List returns a list of organization to which the
|
||||
// user is a member.
|
||||
List(context.Context, *User) ([]*Organization, error)
|
||||
|
||||
// Membership returns true if the user is a member
|
||||
// of the organization, and true if the user is an
|
||||
// of the organization.
|
||||
Membership(context.Context, *User, string) (bool, bool, error)
|
||||
}
|
68
core/perm.go
68
core/perm.go
@ -1,68 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// Perm represents an individuals repository
|
||||
// permission.
|
||||
Perm struct {
|
||||
UserID int64 `db:"perm_user_id" json:"-"`
|
||||
RepoUID string `db:"perm_repo_uid" json:"-"`
|
||||
Read bool `db:"perm_read" json:"read"`
|
||||
Write bool `db:"perm_write" json:"write"`
|
||||
Admin bool `db:"perm_admin" json:"admin"`
|
||||
Synced int64 `db:"perm_synced" json:"-"`
|
||||
Created int64 `db:"perm_created" json:"-"`
|
||||
Updated int64 `db:"perm_updated" json:"-"`
|
||||
}
|
||||
|
||||
// Collaborator represents a project collaborator,
|
||||
// and provides the account and repository permissions
|
||||
// details.
|
||||
Collaborator struct {
|
||||
UserID int64 `db:"perm_user_id" json:"user_id"`
|
||||
RepoUID string `db:"perm_repo_uid" json:"repo_id"`
|
||||
Login string `db:"user_login" json:"login"`
|
||||
Avatar string `db:"user_avatar" json:"avatar"`
|
||||
Read bool `db:"perm_read" json:"read"`
|
||||
Write bool `db:"perm_write" json:"write"`
|
||||
Admin bool `db:"perm_admin" json:"admin"`
|
||||
Synced int64 `db:"perm_synced" json:"synced"`
|
||||
Created int64 `db:"perm_created" json:"created"`
|
||||
Updated int64 `db:"perm_updated" json:"updated"`
|
||||
}
|
||||
|
||||
// PermStore defines operations for working with
|
||||
// repository permissions.
|
||||
PermStore interface {
|
||||
// Find returns a project member from the
|
||||
// datastore.
|
||||
Find(ctx context.Context, repoUID string, userID int64) (*Perm, error)
|
||||
|
||||
// List returns a list of project members from the
|
||||
// datastore.
|
||||
List(ctx context.Context, repoUID string) ([]*Collaborator, error)
|
||||
|
||||
// Update persists an updated project member
|
||||
// to the datastore.
|
||||
Update(context.Context, *Perm) error
|
||||
|
||||
// Delete deletes a project member from the
|
||||
// datastore.
|
||||
Delete(context.Context, *Perm) error
|
||||
}
|
||||
)
|
@ -1,37 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Message defines a build change.
|
||||
type Message struct {
|
||||
Repository string
|
||||
Visibility string
|
||||
Data []byte
|
||||
}
|
||||
|
||||
// Pubsub provides publish subscriber capabilities, distributing
|
||||
// messages from multiple publishers to multiple subscribers.
|
||||
type Pubsub interface {
|
||||
// Publish publishes the message to all subscribers.
|
||||
Publish(context.Context, *Message) error
|
||||
|
||||
// Subscribe subscribes to the message broker.
|
||||
Subscribe(context.Context) (<-chan *Message, <-chan error)
|
||||
|
||||
// Subscribers returns a count of subscribers.
|
||||
Subscribers() (int, error)
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/drone/drone-yaml/yaml"
|
||||
)
|
||||
|
||||
const (
|
||||
// RegistryPull policy allows pulling from a registry.
|
||||
RegistryPull = "pull"
|
||||
|
||||
// RegistryPush Policy allows pushing to a registry for
|
||||
// all event types except pull requests.
|
||||
RegistryPush = "push"
|
||||
|
||||
// RegistryPushPullRequest Policy allows pushing to a
|
||||
// registry for all event types, including pull requests.
|
||||
RegistryPushPullRequest = "push-pull-request"
|
||||
)
|
||||
|
||||
type (
|
||||
// Registry represents a docker registry with credentials.
|
||||
Registry struct {
|
||||
Address string `json:"address"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Policy string `json:"policy"`
|
||||
}
|
||||
|
||||
// RegistryArgs provides arguments for requesting
|
||||
// registry credentials from the remote service.
|
||||
RegistryArgs struct {
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Conf *yaml.Manifest `json:"-"`
|
||||
Pipeline *yaml.Pipeline `json:"-"`
|
||||
}
|
||||
|
||||
// RegistryService provides registry credentials from an
|
||||
// external service.
|
||||
RegistryService interface {
|
||||
// List returns registry credentials from the global
|
||||
// remote registry plugin.
|
||||
List(context.Context, *RegistryArgs) ([]*Registry, error)
|
||||
}
|
||||
)
|
@ -1,24 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Renewer renews the user account authorization. If
|
||||
// successful, the user token and token expiry attributes
|
||||
// are updated, and persisted to the datastore.
|
||||
type Renewer interface {
|
||||
Renew(ctx context.Context, user *User, force bool) error
|
||||
}
|
161
core/repo.go
161
core/repo.go
@ -1,161 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Repository visibility.
|
||||
const (
|
||||
VisibilityPublic = "public"
|
||||
VisibilityPrivate = "private"
|
||||
VisibilityInternal = "internal"
|
||||
)
|
||||
|
||||
// Version control systems.
|
||||
const (
|
||||
VersionControlGit = "git"
|
||||
VersionControlMercurial = "hg"
|
||||
)
|
||||
|
||||
type (
|
||||
// Repository represents a source code repository.
|
||||
Repository struct {
|
||||
ID int64 `json:"id"`
|
||||
UID string `json:"uid"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Namespace string `json:"namespace"`
|
||||
Name string `json:"name"`
|
||||
Slug string `json:"slug"`
|
||||
SCM string `json:"scm"`
|
||||
HTTPURL string `json:"git_http_url"`
|
||||
SSHURL string `json:"git_ssh_url"`
|
||||
Link string `json:"link"`
|
||||
Branch string `json:"default_branch"`
|
||||
Private bool `json:"private"`
|
||||
Visibility string `json:"visibility"`
|
||||
Active bool `json:"active"`
|
||||
Config string `json:"config_path"`
|
||||
Trusted bool `json:"trusted"`
|
||||
Protected bool `json:"protected"`
|
||||
IgnoreForks bool `json:"ignore_forks"`
|
||||
IgnorePulls bool `json:"ignore_pull_requests"`
|
||||
CancelPulls bool `json:"auto_cancel_pull_requests"`
|
||||
CancelPush bool `json:"auto_cancel_pushes"`
|
||||
CancelRunning bool `json:"auto_cancel_running"`
|
||||
Timeout int64 `json:"timeout"`
|
||||
Throttle int64 `json:"throttle,omitempty"`
|
||||
Counter int64 `json:"counter"`
|
||||
Synced int64 `json:"synced"`
|
||||
Created int64 `json:"created"`
|
||||
Updated int64 `json:"updated"`
|
||||
Version int64 `json:"version"`
|
||||
Signer string `json:"-"`
|
||||
Secret string `json:"-"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Perms *Perm `json:"permissions,omitempty"`
|
||||
Archived bool `json:"archived"`
|
||||
}
|
||||
|
||||
RepoBuildStage struct {
|
||||
RepoNamespace string `json:"repo_namespace"`
|
||||
RepoName string `json:"repo_name"`
|
||||
RepoSlug string `json:"repo_slug"`
|
||||
BuildNumber int64 `json:"build_number"`
|
||||
BuildAuthor string `json:"build_author"`
|
||||
BuildAuthorName string `json:"build_author_name"`
|
||||
BuildAuthorEmail string `json:"build_author_email"`
|
||||
BuildAuthorAvatar string `json:"build_author_avatar"`
|
||||
BuildSender string `json:"build_sender"`
|
||||
BuildStarted int64 `json:"build_started"`
|
||||
BuildFinished int64 `json:"build_finished"`
|
||||
BuildCreated int64 `json:"build_created"`
|
||||
BuildUpdated int64 `json:"build_updated"`
|
||||
StageName string `json:"stage_name"`
|
||||
StageKind string `json:"stage_kind"`
|
||||
StageType string `json:"stage_type"`
|
||||
StageStatus string `json:"stage_status"`
|
||||
StageMachine string `json:"stage_machine"`
|
||||
StageOS string `json:"stage_os"`
|
||||
StageArch string `json:"stage_arch"`
|
||||
StageVariant string `json:"stage_variant"`
|
||||
StageKernel string `json:"stage_kernel"`
|
||||
StageLimit string `json:"stage_limit"`
|
||||
StageLimitRepo string `json:"stage_limit_repo"`
|
||||
StageStarted int64 `json:"stage_started"`
|
||||
StageStopped int64 `json:"stage_stopped"`
|
||||
}
|
||||
|
||||
// RepositoryStore defines operations for working with repositories.
|
||||
RepositoryStore interface {
|
||||
// List returns a repository list from the datastore.
|
||||
List(context.Context, int64) ([]*Repository, error)
|
||||
|
||||
// ListLatest returns a unique repository list form
|
||||
// the datastore with the most recent build.
|
||||
ListLatest(context.Context, int64) ([]*Repository, error)
|
||||
|
||||
// ListRecent returns a non-unique repository list form
|
||||
// the datastore with the most recent builds.
|
||||
ListRecent(context.Context, int64) ([]*Repository, error)
|
||||
|
||||
// ListIncomplete returns a non-unique repository list form
|
||||
// the datastore with incomplete builds.
|
||||
ListIncomplete(context.Context) ([]*Repository, error)
|
||||
|
||||
// ListRunningStatus returns a list of build / repository /stage information for builds that are incomplete.
|
||||
ListRunningStatus(context.Context) ([]*RepoBuildStage, error)
|
||||
|
||||
// ListAll returns a paginated list of all repositories
|
||||
// stored in the database, including disabled repositories.
|
||||
ListAll(ctx context.Context, limit, offset int) ([]*Repository, error)
|
||||
|
||||
// Find returns a repository from the datastore.
|
||||
Find(context.Context, int64) (*Repository, error)
|
||||
|
||||
// FindName returns a named repository from the datastore.
|
||||
FindName(context.Context, string, string) (*Repository, error)
|
||||
|
||||
// Create persists a new repository in the datastore.
|
||||
Create(context.Context, *Repository) error
|
||||
|
||||
// Activate persists the activated repository to the datastore.
|
||||
Activate(context.Context, *Repository) error
|
||||
|
||||
// Update persists repository changes to the datastore.
|
||||
Update(context.Context, *Repository) error
|
||||
|
||||
// Delete deletes a repository from the datastore.
|
||||
Delete(context.Context, *Repository) error
|
||||
|
||||
// Count returns a count of activated repositories.
|
||||
Count(context.Context) (int64, error)
|
||||
|
||||
// Increment returns an incremented build number
|
||||
Increment(context.Context, *Repository) (*Repository, error)
|
||||
}
|
||||
|
||||
// RepositoryService provides access to repository information
|
||||
// in the remote source code management system (e.g. GitHub).
|
||||
RepositoryService interface {
|
||||
// List returns a list of repositories.
|
||||
List(ctx context.Context, user *User) ([]*Repository, error)
|
||||
|
||||
// Find returns the named repository details.
|
||||
Find(ctx context.Context, user *User, repo string) (*Repository, error)
|
||||
|
||||
// FindPerm returns the named repository permissions.
|
||||
FindPerm(ctx context.Context, user *User, repo string) (*Perm, error)
|
||||
}
|
||||
)
|
@ -1,58 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Filter provides filter criteria to limit stages requested
|
||||
// from the scheduler.
|
||||
type Filter struct {
|
||||
Kind string
|
||||
Type string
|
||||
OS string
|
||||
Arch string
|
||||
Kernel string
|
||||
Variant string
|
||||
Labels map[string]string
|
||||
}
|
||||
|
||||
// Scheduler schedules Build stages for execution.
|
||||
type Scheduler interface {
|
||||
// Schedule schedules the stage for execution.
|
||||
Schedule(context.Context, *Stage) error
|
||||
|
||||
// Request requests the next stage scheduled for execution.
|
||||
Request(context.Context, Filter) (*Stage, error)
|
||||
|
||||
// Cancel cancels scheduled or running jobs associated
|
||||
// with the parent build ID.
|
||||
Cancel(context.Context, int64) error
|
||||
|
||||
// Cancelled blocks and listens for a cancellation event and
|
||||
// returns true if the build has been cancelled.
|
||||
Cancelled(context.Context, int64) (bool, error)
|
||||
|
||||
// Pause pauses the scheduler and prevents new pipelines
|
||||
// from being scheduled for execution.
|
||||
Pause(context.Context) error
|
||||
|
||||
// Resume unpauses the scheduler, allowing new pipelines
|
||||
// to be scheduled for execution.
|
||||
Resume(context.Context) error
|
||||
|
||||
// Stats provides statistics for underlying scheduler. The
|
||||
// data format is scheduler-specific.
|
||||
Stats(context.Context) (interface{}, error)
|
||||
}
|
135
core/secret.go
135
core/secret.go
@ -1,135 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"regexp"
|
||||
|
||||
"github.com/drone/drone-yaml/yaml"
|
||||
)
|
||||
|
||||
var (
|
||||
errSecretNameInvalid = errors.New("Invalid Secret Name")
|
||||
errSecretDataInvalid = errors.New("Invalid Secret Value")
|
||||
)
|
||||
|
||||
type (
|
||||
// Secret represents a secret variable, such as a password or token,
|
||||
// that is provided to the build at runtime.
|
||||
Secret struct {
|
||||
ID int64 `json:"id,omitempty"`
|
||||
RepoID int64 `json:"repo_id,omitempty"`
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Data string `json:"data,omitempty"`
|
||||
PullRequest bool `json:"pull_request,omitempty"`
|
||||
PullRequestPush bool `json:"pull_request_push,omitempty"`
|
||||
}
|
||||
|
||||
// SecretArgs provides arguments for requesting secrets
|
||||
// from the remote service.
|
||||
SecretArgs struct {
|
||||
Name string `json:"name"`
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Conf *yaml.Manifest `json:"-"`
|
||||
}
|
||||
|
||||
// SecretStore manages repository secrets.
|
||||
SecretStore interface {
|
||||
// List returns a secret list from the datastore.
|
||||
List(context.Context, int64) ([]*Secret, error)
|
||||
|
||||
// Find returns a secret from the datastore.
|
||||
Find(context.Context, int64) (*Secret, error)
|
||||
|
||||
// FindName returns a secret from the datastore.
|
||||
FindName(context.Context, int64, string) (*Secret, error)
|
||||
|
||||
// Create persists a new secret to the datastore.
|
||||
Create(context.Context, *Secret) error
|
||||
|
||||
// Update persists an updated secret to the datastore.
|
||||
Update(context.Context, *Secret) error
|
||||
|
||||
// Delete deletes a secret from the datastore.
|
||||
Delete(context.Context, *Secret) error
|
||||
}
|
||||
|
||||
// GlobalSecretStore manages global secrets accessible to
|
||||
// all repositories in the system.
|
||||
GlobalSecretStore interface {
|
||||
// List returns a secret list from the datastore.
|
||||
List(ctx context.Context, namespace string) ([]*Secret, error)
|
||||
|
||||
// ListAll returns a secret list from the datastore
|
||||
// for all namespaces.
|
||||
ListAll(ctx context.Context) ([]*Secret, error)
|
||||
|
||||
// Find returns a secret from the datastore.
|
||||
Find(ctx context.Context, id int64) (*Secret, error)
|
||||
|
||||
// FindName returns a secret from the datastore.
|
||||
FindName(ctx context.Context, namespace, name string) (*Secret, error)
|
||||
|
||||
// Create persists a new secret to the datastore.
|
||||
Create(ctx context.Context, secret *Secret) error
|
||||
|
||||
// Update persists an updated secret to the datastore.
|
||||
Update(ctx context.Context, secret *Secret) error
|
||||
|
||||
// Delete deletes a secret from the datastore.
|
||||
Delete(ctx context.Context, secret *Secret) error
|
||||
}
|
||||
|
||||
// SecretService provides secrets from an external service.
|
||||
SecretService interface {
|
||||
// Find returns a named secret from the global remote service.
|
||||
Find(context.Context, *SecretArgs) (*Secret, error)
|
||||
}
|
||||
)
|
||||
|
||||
// Validate validates the required fields and formats.
|
||||
func (s *Secret) Validate() error {
|
||||
switch {
|
||||
case len(s.Name) == 0:
|
||||
return errSecretNameInvalid
|
||||
case len(s.Data) == 0:
|
||||
return errSecretDataInvalid
|
||||
case slugRE.MatchString(s.Name):
|
||||
return errSecretNameInvalid
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// Copy makes a copy of the secret without the value.
|
||||
func (s *Secret) Copy() *Secret {
|
||||
return &Secret{
|
||||
ID: s.ID,
|
||||
RepoID: s.RepoID,
|
||||
Namespace: s.Namespace,
|
||||
Name: s.Name,
|
||||
Type: s.Type,
|
||||
PullRequest: s.PullRequest,
|
||||
PullRequestPush: s.PullRequestPush,
|
||||
}
|
||||
}
|
||||
|
||||
// slug regular expression
|
||||
var slugRE = regexp.MustCompile("[^a-zA-Z0-9-_.]+")
|
@ -1,78 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestSecretValidate(t *testing.T) {
|
||||
tests := []struct {
|
||||
secret *Secret
|
||||
error error
|
||||
}{
|
||||
{
|
||||
secret: &Secret{Name: "password", Data: "correct-horse-battery-staple"},
|
||||
error: nil,
|
||||
},
|
||||
{
|
||||
secret: &Secret{Name: ".some_random-password", Data: "correct-horse-battery-staple"},
|
||||
error: nil,
|
||||
},
|
||||
{
|
||||
secret: &Secret{Name: "password", Data: ""},
|
||||
error: errSecretDataInvalid,
|
||||
},
|
||||
{
|
||||
secret: &Secret{Name: "", Data: "correct-horse-battery-staple"},
|
||||
error: errSecretNameInvalid,
|
||||
},
|
||||
{
|
||||
secret: &Secret{Name: "docker/password", Data: "correct-horse-battery-staple"},
|
||||
error: errSecretNameInvalid,
|
||||
},
|
||||
}
|
||||
for i, test := range tests {
|
||||
got, want := test.secret.Validate(), test.error
|
||||
if got != want {
|
||||
t.Errorf("Want error %v, got %v at index %d", want, got, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSecretSafeCopy(t *testing.T) {
|
||||
before := Secret{
|
||||
ID: 1,
|
||||
RepoID: 2,
|
||||
Name: "docker_password",
|
||||
Namespace: "octocat",
|
||||
Type: "",
|
||||
Data: "correct-horse-battery-staple",
|
||||
PullRequest: true,
|
||||
PullRequestPush: true,
|
||||
}
|
||||
after := before.Copy()
|
||||
if got, want := after.ID, before.ID; got != want {
|
||||
t.Errorf("Want secret ID %d, got %d", want, got)
|
||||
}
|
||||
if got, want := after.RepoID, before.RepoID; got != want {
|
||||
t.Errorf("Want secret RepoID %d, got %d", want, got)
|
||||
}
|
||||
if got, want := after.Name, before.Name; got != want {
|
||||
t.Errorf("Want secret Name %s, got %s", want, got)
|
||||
}
|
||||
if got, want := after.Namespace, before.Namespace; got != want {
|
||||
t.Errorf("Want secret Namespace %s, got %s", want, got)
|
||||
}
|
||||
if got, want := after.PullRequest, before.PullRequest; got != want {
|
||||
t.Errorf("Want secret PullRequest %v, got %v", want, got)
|
||||
}
|
||||
if got, want := after.PullRequestPush, before.PullRequestPush; got != want {
|
||||
t.Errorf("Want secret PullRequest %v, got %v", want, got)
|
||||
}
|
||||
if after.Data != "" {
|
||||
t.Errorf("Expect secret is empty after copy")
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "net/http"
|
||||
|
||||
// Session provides session management for
|
||||
// authenticated users.
|
||||
type Session interface {
|
||||
// Create creates a new user session and writes the
|
||||
// session to the http.Response.
|
||||
Create(http.ResponseWriter, *User) error
|
||||
|
||||
// Delete deletes the user session from the http.Response.
|
||||
Delete(http.ResponseWriter) error
|
||||
|
||||
// Get returns the session from the http.Request. If no
|
||||
// session exists a nil user is returned. Returning an
|
||||
// error is optional, for debugging purposes only.
|
||||
Get(*http.Request) (*User, error)
|
||||
}
|
106
core/stage.go
106
core/stage.go
@ -1,106 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// Stage represents a stage of build execution.
|
||||
Stage struct {
|
||||
ID int64 `json:"id"`
|
||||
RepoID int64 `json:"repo_id"`
|
||||
BuildID int64 `json:"build_id"`
|
||||
Number int `json:"number"`
|
||||
Name string `json:"name"`
|
||||
Kind string `json:"kind,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Status string `json:"status"`
|
||||
Error string `json:"error,omitempty"`
|
||||
ErrIgnore bool `json:"errignore"`
|
||||
ExitCode int `json:"exit_code"`
|
||||
Machine string `json:"machine,omitempty"`
|
||||
OS string `json:"os"`
|
||||
Arch string `json:"arch"`
|
||||
Variant string `json:"variant,omitempty"`
|
||||
Kernel string `json:"kernel,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
LimitRepo int `json:"throttle,omitempty"`
|
||||
Started int64 `json:"started"`
|
||||
Stopped int64 `json:"stopped"`
|
||||
Created int64 `json:"created"`
|
||||
Updated int64 `json:"updated"`
|
||||
Version int64 `json:"version"`
|
||||
OnSuccess bool `json:"on_success"`
|
||||
OnFailure bool `json:"on_failure"`
|
||||
DependsOn []string `json:"depends_on,omitempty"`
|
||||
Labels map[string]string `json:"labels,omitempty"`
|
||||
Steps []*Step `json:"steps,omitempty"`
|
||||
}
|
||||
|
||||
// StageStore persists build stage information to storage.
|
||||
StageStore interface {
|
||||
// List returns a build stage list from the datastore.
|
||||
List(context.Context, int64) ([]*Stage, error)
|
||||
|
||||
// List returns a build stage list from the datastore
|
||||
// where the stage is incomplete (pending or running).
|
||||
ListIncomplete(ctx context.Context) ([]*Stage, error)
|
||||
|
||||
// ListSteps returns a build stage list from the datastore,
|
||||
// with the individual steps included.
|
||||
ListSteps(context.Context, int64) ([]*Stage, error)
|
||||
|
||||
// ListState returns a build stage list from the database
|
||||
// across all repositories.
|
||||
ListState(context.Context, string) ([]*Stage, error)
|
||||
|
||||
// Find returns a build stage from the datastore by ID.
|
||||
Find(context.Context, int64) (*Stage, error)
|
||||
|
||||
// FindNumber returns a stage from the datastore by number.
|
||||
FindNumber(context.Context, int64, int) (*Stage, error)
|
||||
|
||||
// Create persists a new stage to the datastore.
|
||||
Create(context.Context, *Stage) error
|
||||
|
||||
// Update persists an updated stage to the datastore.
|
||||
Update(context.Context, *Stage) error
|
||||
}
|
||||
)
|
||||
|
||||
// IsDone returns true if the step has a completed state.
|
||||
func (s *Stage) IsDone() bool {
|
||||
switch s.Status {
|
||||
case StatusWaiting,
|
||||
StatusPending,
|
||||
StatusRunning,
|
||||
StatusBlocked:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// IsFailed returns true if the step has failed
|
||||
func (s *Stage) IsFailed() bool {
|
||||
switch s.Status {
|
||||
case StatusFailing,
|
||||
StatusKilled,
|
||||
StatusError:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
||||
|
||||
import "testing"
|
||||
|
||||
var statusDone = []string{
|
||||
StatusDeclined,
|
||||
StatusError,
|
||||
StatusFailing,
|
||||
StatusKilled,
|
||||
StatusSkipped,
|
||||
StatusPassing,
|
||||
}
|
||||
|
||||
var statusNotDone = []string{
|
||||
StatusWaiting,
|
||||
StatusPending,
|
||||
StatusRunning,
|
||||
StatusBlocked,
|
||||
}
|
||||
|
||||
var statusFailed = []string{
|
||||
StatusError,
|
||||
StatusFailing,
|
||||
StatusKilled,
|
||||
}
|
||||
|
||||
var statusNotFailed = []string{
|
||||
StatusDeclined,
|
||||
StatusSkipped,
|
||||
StatusPassing,
|
||||
StatusWaiting,
|
||||
StatusPending,
|
||||
StatusRunning,
|
||||
StatusBlocked,
|
||||
}
|
||||
|
||||
func TestStageIsDone(t *testing.T) {
|
||||
for _, status := range statusDone {
|
||||
v := Stage{Status: status}
|
||||
if v.IsDone() == false {
|
||||
t.Errorf("Expect status %s is done", status)
|
||||
}
|
||||
}
|
||||
|
||||
for _, status := range statusNotDone {
|
||||
v := Stage{Status: status}
|
||||
if v.IsDone() == true {
|
||||
t.Errorf("Expect status %s is not done", status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestStageIsFailed(t *testing.T) {
|
||||
for _, status := range statusFailed {
|
||||
v := Stage{Status: status}
|
||||
if v.IsFailed() == false {
|
||||
t.Errorf("Expect status %s is failed", status)
|
||||
}
|
||||
}
|
||||
|
||||
for _, status := range statusNotFailed {
|
||||
v := Stage{Status: status}
|
||||
if v.IsFailed() == true {
|
||||
t.Errorf("Expect status %s is not failed", status)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Status types.
|
||||
const (
|
||||
StatusSkipped = "skipped"
|
||||
StatusBlocked = "blocked"
|
||||
StatusDeclined = "declined"
|
||||
StatusWaiting = "waiting_on_dependencies"
|
||||
StatusPending = "pending"
|
||||
StatusRunning = "running"
|
||||
StatusPassing = "success"
|
||||
StatusFailing = "failure"
|
||||
StatusKilled = "killed"
|
||||
StatusError = "error"
|
||||
)
|
||||
|
||||
type (
|
||||
// Status represents a commit status.
|
||||
Status struct {
|
||||
State string
|
||||
Label string
|
||||
Desc string
|
||||
Target string
|
||||
}
|
||||
|
||||
// StatusInput provides the necessary metadata to
|
||||
// set the commit or deployment status.
|
||||
StatusInput struct {
|
||||
Repo *Repository
|
||||
Build *Build
|
||||
}
|
||||
|
||||
// StatusService sends the commit status to an external
|
||||
// source code management service (e.g. GitHub).
|
||||
StatusService interface {
|
||||
Send(ctx context.Context, user *User, req *StatusInput) error
|
||||
}
|
||||
)
|
69
core/step.go
69
core/step.go
@ -1,69 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
type (
|
||||
// Step represents an individual step in the stage.
|
||||
Step struct {
|
||||
ID int64 `json:"id"`
|
||||
StageID int64 `json:"step_id"` // this is a typo, fixing it has far reaching ramifications. It should only be attempted in a major version change
|
||||
Number int `json:"number"`
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"`
|
||||
Error string `json:"error,omitempty"`
|
||||
ErrIgnore bool `json:"errignore,omitempty"`
|
||||
ExitCode int `json:"exit_code"`
|
||||
Started int64 `json:"started,omitempty"`
|
||||
Stopped int64 `json:"stopped,omitempty"`
|
||||
Version int64 `json:"version"`
|
||||
DependsOn []string `json:"depends_on,omitempty"`
|
||||
Image string `json:"image,omitempty"`
|
||||
Detached bool `json:"detached,omitempty"`
|
||||
Schema string `json:"schema,omitempty"`
|
||||
}
|
||||
|
||||
// StepStore persists build step information to storage.
|
||||
StepStore interface {
|
||||
// List returns a build stage list from the datastore.
|
||||
List(context.Context, int64) ([]*Step, error)
|
||||
|
||||
// Find returns a build stage from the datastore by ID.
|
||||
Find(context.Context, int64) (*Step, error)
|
||||
|
||||
// FindNumber returns a stage from the datastore by number.
|
||||
FindNumber(context.Context, int64, int) (*Step, error)
|
||||
|
||||
// Create persists a new stage to the datastore.
|
||||
Create(context.Context, *Step) error
|
||||
|
||||
// Update persists an updated stage to the datastore.
|
||||
Update(context.Context, *Step) error
|
||||
}
|
||||
)
|
||||
|
||||
// IsDone returns true if the step has a completed state.
|
||||
func (s *Step) IsDone() bool {
|
||||
switch s.Status {
|
||||
case StatusWaiting,
|
||||
StatusPending,
|
||||
StatusRunning,
|
||||
StatusBlocked:
|
||||
return false
|
||||
default:
|
||||
return true
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestStepIsDone(t *testing.T) {
|
||||
for _, status := range statusDone {
|
||||
v := Step{Status: status}
|
||||
if v.IsDone() == false {
|
||||
t.Errorf("Expect status %s is done", status)
|
||||
}
|
||||
}
|
||||
|
||||
for _, status := range statusNotDone {
|
||||
v := Step{Status: status}
|
||||
if v.IsDone() == true {
|
||||
t.Errorf("Expect status %s is not done", status)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Syncer synchronizes the account repository list.
|
||||
type Syncer interface {
|
||||
Sync(context.Context, *User) (*Batch, error)
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
// System stores system information.
|
||||
type System struct {
|
||||
Proto string `json:"proto,omitempty"`
|
||||
Host string `json:"host,omitempty"`
|
||||
Link string `json:"link,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/drone/drone/handler/api/errors"
|
||||
)
|
||||
|
||||
var (
|
||||
errTemplateNameInvalid = errors.New("No Template Name Provided")
|
||||
errTemplateDataInvalid = errors.New("No Template Data Provided")
|
||||
)
|
||||
|
||||
type (
|
||||
TemplateArgs struct {
|
||||
Kind string
|
||||
Load string
|
||||
Data map[string]interface{}
|
||||
}
|
||||
|
||||
Template struct {
|
||||
Id int64 `json:"id,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Namespace string `json:"namespace,omitempty"`
|
||||
Data string `json:"data,omitempty"`
|
||||
Created int64 `json:"created,omitempty"`
|
||||
Updated int64 `json:"updated,omitempty"`
|
||||
}
|
||||
|
||||
// TemplateStore manages repository templates.
|
||||
TemplateStore interface {
|
||||
// List returns template list at org level
|
||||
List(ctx context.Context, namespace string) ([]*Template, error)
|
||||
|
||||
// ListAll returns templates list from the datastore.
|
||||
ListAll(ctx context.Context) ([]*Template, error)
|
||||
|
||||
// Find returns a template from the datastore.
|
||||
Find(ctx context.Context, id int64) (*Template, error)
|
||||
|
||||
// FindName returns a template from the data store
|
||||
FindName(ctx context.Context, name string, namespace string) (*Template, error)
|
||||
|
||||
// Create persists a new template to the datastore.
|
||||
Create(ctx context.Context, template *Template) error
|
||||
|
||||
// Update persists an updated template to the datastore.
|
||||
Update(ctx context.Context, template *Template) error
|
||||
|
||||
// Delete deletes a template from the datastore.
|
||||
Delete(ctx context.Context, template *Template) error
|
||||
}
|
||||
)
|
||||
|
||||
// Validate validates the required fields and formats.
|
||||
func (s *Template) Validate() error {
|
||||
switch {
|
||||
case len(s.Name) == 0:
|
||||
return errTemplateNameInvalid
|
||||
case len(s.Data) == 0:
|
||||
return errTemplateDataInvalid
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Transferer handles transferring repository ownership from one
|
||||
// user to another user account.
|
||||
type Transferer interface {
|
||||
Transfer(ctx context.Context, user *User) error
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import "context"
|
||||
|
||||
// Trigger types
|
||||
const (
|
||||
TriggerHook = "@hook"
|
||||
TriggerCron = "@cron"
|
||||
)
|
||||
|
||||
// Triggerer is responsible for triggering a Build from an
|
||||
// incoming drone. If a build is skipped a nil value is
|
||||
// returned.
|
||||
type Triggerer interface {
|
||||
Trigger(context.Context, *Repository, *Hook) (*Build, error)
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
115
core/user.go
115
core/user.go
@ -1,115 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/asaskevich/govalidator"
|
||||
)
|
||||
|
||||
var (
|
||||
errUsernameLen = errors.New("Invalid username length")
|
||||
errUsernameChar = errors.New("Invalid character in username")
|
||||
)
|
||||
|
||||
type (
|
||||
// User represents a user of the system.
|
||||
User struct {
|
||||
ID int64 `json:"id"`
|
||||
Login string `json:"login"`
|
||||
Email string `json:"email"`
|
||||
Machine bool `json:"machine"`
|
||||
Admin bool `json:"admin"`
|
||||
Active bool `json:"active"`
|
||||
Avatar string `json:"avatar"`
|
||||
Syncing bool `json:"syncing"`
|
||||
Synced int64 `json:"synced"`
|
||||
Created int64 `json:"created"`
|
||||
Updated int64 `json:"updated"`
|
||||
LastLogin int64 `json:"last_login"`
|
||||
Token string `json:"-"`
|
||||
Refresh string `json:"-"`
|
||||
Expiry int64 `json:"-"`
|
||||
Hash string `json:"-"`
|
||||
}
|
||||
|
||||
// UserParams defines user query parameters.
|
||||
UserParams struct {
|
||||
// Sort instructs the system to sort by Login if true,
|
||||
// else sort by primary key.
|
||||
Sort bool
|
||||
|
||||
Page int64
|
||||
Size int64
|
||||
}
|
||||
|
||||
// UserStore defines operations for working with users.
|
||||
UserStore interface {
|
||||
// Find returns a user from the datastore.
|
||||
Find(context.Context, int64) (*User, error)
|
||||
|
||||
// FindLogin returns a user from the datastore by username.
|
||||
FindLogin(context.Context, string) (*User, error)
|
||||
|
||||
// FindToken returns a user from the datastore by token.
|
||||
FindToken(context.Context, string) (*User, error)
|
||||
|
||||
// List returns a list of users from the datastore.
|
||||
List(context.Context) ([]*User, error)
|
||||
|
||||
// ListRange returns a range of users from the datastore.
|
||||
ListRange(context.Context, UserParams) ([]*User, error)
|
||||
|
||||
// Create persists a new user to the datastore.
|
||||
Create(context.Context, *User) error
|
||||
|
||||
// Update persists an updated user to the datastore.
|
||||
Update(context.Context, *User) error
|
||||
|
||||
// Delete deletes a user from the datastore.
|
||||
Delete(context.Context, *User) error
|
||||
|
||||
// Count returns a count of human and machine users.
|
||||
Count(context.Context) (int64, error)
|
||||
|
||||
// CountHuman returns a count of human users.
|
||||
CountHuman(context.Context) (int64, error)
|
||||
}
|
||||
|
||||
// UserService provides access to user account
|
||||
// resources in the remote system (e.g. GitHub).
|
||||
UserService interface {
|
||||
// Find returns the authenticated user.
|
||||
Find(ctx context.Context, access, refresh string) (*User, error)
|
||||
|
||||
// FindLogin returns a user by username.
|
||||
FindLogin(ctx context.Context, user *User, login string) (*User, error)
|
||||
}
|
||||
)
|
||||
|
||||
// Validate validates the user and returns an error if the
|
||||
// validation fails.
|
||||
func (u *User) Validate() error {
|
||||
switch {
|
||||
case !govalidator.IsByteLength(u.Login, 1, 50):
|
||||
return errUsernameLen
|
||||
case !govalidator.Matches(u.Login, "^[.a-zA-Z0-9_-]+$"):
|
||||
return errUsernameChar
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||||
// Use of this source code is governed by the Drone Non-Commercial License
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// +build !oss
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestValidateUser(t *testing.T) {
|
||||
tests := []struct {
|
||||
user *User
|
||||
err error
|
||||
}{
|
||||
{
|
||||
user: &User{Login: ""},
|
||||
err: errUsernameLen,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "©"}, // non ascii character
|
||||
err: errUsernameChar,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "소주"}, // non ascii character
|
||||
err: errUsernameChar,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "foo/bar"},
|
||||
err: errUsernameChar,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "this-is-a-really-really-really-really-long-username"},
|
||||
err: errUsernameLen,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "octocat"},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "octocat.with.dot"},
|
||||
err: nil,
|
||||
},
|
||||
{
|
||||
user: &User{Login: "OctO-Cat_01"},
|
||||
err: nil,
|
||||
},
|
||||
}
|
||||
for i, test := range tests {
|
||||
got := test.user.Validate()
|
||||
if got == nil && test.err == nil {
|
||||
continue
|
||||
}
|
||||
if got == nil && test.err != nil {
|
||||
t.Errorf("Expected error: %q at index %d", test.err, i)
|
||||
continue
|
||||
}
|
||||
if got != nil && test.err == nil {
|
||||
t.Errorf("Unexpected error: %q at index %d", got, i)
|
||||
continue
|
||||
}
|
||||
if got, want := got.Error(), test.err.Error(); got != want {
|
||||
t.Errorf("Want error %q, got %q at index %d", want, got, i)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrValidatorSkip is returned if the pipeline
|
||||
// validation fails, but the pipeline should be skipped
|
||||
// and silently ignored instead of erroring.
|
||||
ErrValidatorSkip = errors.New("validation failed: skip pipeline")
|
||||
|
||||
// ErrValidatorBlock is returned if the pipeline
|
||||
// validation fails, but the pipeline should be blocked
|
||||
// pending manual approval instead of erroring.
|
||||
ErrValidatorBlock = errors.New("validation failed: block pipeline")
|
||||
)
|
||||
|
||||
type (
|
||||
// ValidateArgs represents a request to the pipeline
|
||||
// validation service.
|
||||
ValidateArgs struct {
|
||||
User *User `json:"-"`
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
Config *Config `json:"config,omitempty"`
|
||||
}
|
||||
|
||||
// ValidateService validates the yaml configuration
|
||||
// and returns an error if the yaml is deemed invalid.
|
||||
ValidateService interface {
|
||||
Validate(context.Context, *ValidateArgs) error
|
||||
}
|
||||
)
|
@ -1,59 +0,0 @@
|
||||
// Copyright 2019 Drone IO, Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
// Webhook event types.
|
||||
const (
|
||||
WebhookEventBuild = "build"
|
||||
WebhookEventRepo = "repo"
|
||||
WebhookEventUser = "user"
|
||||
)
|
||||
|
||||
// Webhook action types.
|
||||
const (
|
||||
WebhookActionCreated = "created"
|
||||
WebhookActionUpdated = "updated"
|
||||
WebhookActionDeleted = "deleted"
|
||||
WebhookActionEnabled = "enabled"
|
||||
WebhookActionDisabled = "disabled"
|
||||
)
|
||||
|
||||
type (
|
||||
// Webhook defines an integration endpoint.
|
||||
Webhook struct {
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
Signer string `json:"-"`
|
||||
SkipVerify bool `json:"skip_verify,omitempty"`
|
||||
}
|
||||
|
||||
// WebhookData provides the webhook data.
|
||||
WebhookData struct {
|
||||
Event string `json:"event"`
|
||||
Action string `json:"action"`
|
||||
User *User `json:"user,omitempty"`
|
||||
Repo *Repository `json:"repo,omitempty"`
|
||||
Build *Build `json:"build,omitempty"`
|
||||
}
|
||||
|
||||
// WebhookSender sends the webhook payload.
|
||||
WebhookSender interface {
|
||||
// Send sends the webhook to the global endpoint.
|
||||
Send(context.Context, *WebhookData) error
|
||||
}
|
||||
)
|
@ -1,19 +0,0 @@
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
ENV GODEBUG netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/amd64
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ADD release/linux/amd64/drone-agent /bin/
|
||||
|
||||
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ENTRYPOINT ["/bin/drone-agent"]
|
@ -1,12 +0,0 @@
|
||||
FROM drone/ca-certs
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/arm
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ENV DRONE_RUNNER_VARIANT=v7
|
||||
ADD release/linux/arm/drone-agent /bin/
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ENTRYPOINT ["/bin/drone-agent"]
|
@ -1,12 +0,0 @@
|
||||
FROM drone/ca-certs
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm64
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/arm64
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ENV DRONE_RUNNER_VARIANT=v8
|
||||
ADD release/linux/arm64/drone-agent /bin/
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ENTRYPOINT ["/bin/drone-agent"]
|
@ -1,14 +0,0 @@
|
||||
FROM mcr.microsoft.com/windows/nanoserver:1803
|
||||
USER ContainerAdministrator
|
||||
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=windows
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=windows/amd64
|
||||
ENV DRONE_RUNNER_KERNEL=1803
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ADD release/windows/amd64/drone-agent.exe C:/drone-agent.exe
|
||||
ENTRYPOINT [ "C:\\drone-agent.exe" ]
|
@ -1,14 +0,0 @@
|
||||
FROM mcr.microsoft.com/windows/nanoserver:1809
|
||||
USER ContainerAdministrator
|
||||
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=windows
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=windows/amd64
|
||||
ENV DRONE_RUNNER_KERNEL=1809
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ADD release/windows/amd64/drone-agent.exe C:/drone-agent.exe
|
||||
ENTRYPOINT [ "C:\\drone-agent.exe" ]
|
@ -1,14 +0,0 @@
|
||||
FROM mcr.microsoft.com/windows/nanoserver:1903
|
||||
USER ContainerAdministrator
|
||||
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=windows
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=windows/amd64
|
||||
ENV DRONE_RUNNER_KERNEL=1903
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
|
||||
LABEL com.centurylinklabs.watchtower.stop-signal="SIGINT"
|
||||
|
||||
ADD release/windows/amd64/drone-agent.exe C:/drone-agent.exe
|
||||
ENTRYPOINT [ "C:\\drone-agent.exe" ]
|
@ -1,15 +0,0 @@
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
ENV GODEBUG netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/amd64
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ADD release/linux/amd64/drone-controller /bin/
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ENTRYPOINT ["/bin/drone-controller"]
|
@ -1,16 +0,0 @@
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/arm
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ENV DRONE_RUNNER_VARIANT=v7
|
||||
ADD release/linux/arm/drone-controller /bin/
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ENTRYPOINT ["/bin/drone-controller"]
|
@ -1,16 +0,0 @@
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm64
|
||||
ENV DRONE_RUNNER_PLATFORM=linux/arm64
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
ENV DRONE_RUNNER_VARIANT=v8
|
||||
ADD release/linux/arm64/drone-controller /bin/
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ENTRYPOINT ["/bin/drone-controller"]
|
@ -1,12 +0,0 @@
|
||||
FROM mcr.microsoft.com/windows/nanoserver:1803
|
||||
USER ContainerAdministrator
|
||||
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=windows
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=windows/amd64
|
||||
ENV DRONE_RUNNER_KERNEL=1803
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
|
||||
ADD release/windows/1803/amd64/drone-controller.exe C:/drone-controller.exe
|
||||
ENTRYPOINT [ "C:\\drone-controller.exe" ]
|
@ -1,12 +0,0 @@
|
||||
FROM mcr.microsoft.com/windows/nanoserver:1809
|
||||
USER ContainerAdministrator
|
||||
|
||||
ENV GODEBUG=netdns=go
|
||||
ENV DRONE_RUNNER_OS=windows
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_RUNNER_PLATFORM=windows/amd64
|
||||
ENV DRONE_RUNNER_KERNEL=1809
|
||||
ENV DRONE_RUNNER_CAPACITY=1
|
||||
|
||||
ADD release/windows/1809/amd64/drone-controller.exe C:/drone-controller.exe
|
||||
ENTRYPOINT [ "C:\\drone-controller.exe" ]
|
@ -1,27 +0,0 @@
|
||||
# docker build --rm -f docker/Dockerfile -t drone/drone .
|
||||
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
EXPOSE 80 443
|
||||
VOLUME /data
|
||||
|
||||
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
ENV GODEBUG netdns=go
|
||||
ENV XDG_CACHE_HOME /data
|
||||
ENV DRONE_DATABASE_DRIVER sqlite3
|
||||
ENV DRONE_DATABASE_DATASOURCE /data/database.sqlite
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=amd64
|
||||
ENV DRONE_SERVER_PORT=:80
|
||||
ENV DRONE_SERVER_HOST=localhost
|
||||
ENV DRONE_DATADOG_ENABLED=true
|
||||
ENV DRONE_DATADOG_ENDPOINT=https://stats.drone.ci/api/v1/series
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ADD release/linux/amd64/drone-server /bin/
|
||||
ENTRYPOINT ["/bin/drone-server"]
|
@ -1,27 +0,0 @@
|
||||
# docker build --rm -f docker/Dockerfile -t drone/drone .
|
||||
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
EXPOSE 80 443
|
||||
VOLUME /data
|
||||
|
||||
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
ENV GODEBUG netdns=go
|
||||
ENV XDG_CACHE_HOME /data
|
||||
ENV DRONE_DATABASE_DRIVER sqlite3
|
||||
ENV DRONE_DATABASE_DATASOURCE /data/database.sqlite
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm
|
||||
ENV DRONE_SERVER_PORT=:80
|
||||
ENV DRONE_SERVER_HOST=localhost
|
||||
ENV DRONE_DATADOG_ENABLED=true
|
||||
ENV DRONE_DATADOG_ENDPOINT=https://stats.drone.ci/api/v1/series
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ADD release/linux/arm/drone-server /bin/
|
||||
ENTRYPOINT ["/bin/drone-server"]
|
@ -1,27 +0,0 @@
|
||||
# docker build --rm -f docker/Dockerfile -t drone/drone .
|
||||
|
||||
FROM alpine:3.11 as alpine
|
||||
RUN apk add -U --no-cache ca-certificates tzdata
|
||||
|
||||
FROM alpine:3.11
|
||||
EXPOSE 80 443
|
||||
VOLUME /data
|
||||
|
||||
RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||
|
||||
ENV GODEBUG netdns=go
|
||||
ENV XDG_CACHE_HOME /data
|
||||
ENV DRONE_DATABASE_DRIVER sqlite3
|
||||
ENV DRONE_DATABASE_DATASOURCE /data/database.sqlite
|
||||
ENV DRONE_RUNNER_OS=linux
|
||||
ENV DRONE_RUNNER_ARCH=arm64
|
||||
ENV DRONE_SERVER_PORT=:80
|
||||
ENV DRONE_SERVER_HOST=localhost
|
||||
ENV DRONE_DATADOG_ENABLED=true
|
||||
ENV DRONE_DATADOG_ENDPOINT=https://stats.drone.ci/api/v1/series
|
||||
|
||||
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=alpine /usr/share/zoneinfo /usr/share/zoneinfo
|
||||
|
||||
ADD release/linux/arm64/drone-server /bin/
|
||||
ENTRYPOINT ["/bin/drone-server"]
|
@ -1,57 +0,0 @@
|
||||
# Local development
|
||||
|
||||
This directory contains Docker compose files used by the core development team for local development and testing purposes only. These are not part of the core distribution, and are not intended for use outside of the core development team. We are not currently accepting changes or additions to these files.
|
||||
|
||||
## Running a Drone deployment locally using Github
|
||||
|
||||
At the end of this guide you will have a drone server and a drone runner that is hooked up to your Github account. This will allow you to trigger builds on your Github repositories.
|
||||
|
||||
### (prerequisite) Setup a Github oauth application
|
||||
|
||||
Create an oauth application here <https://github.com/settings/developers>
|
||||
|
||||
The most important entry is setting the `Authorization callback URL` you can set this to `http://localhost:8080/login`
|
||||
|
||||
You will also need to create a client secret for the application.
|
||||
|
||||
Now you have the `DRONE_GITHUB_CLIENT_ID` and `DRONE_GITHUB_CLIENT_SECRET`
|
||||
|
||||
### (prerequisite) Setup Ngrok
|
||||
|
||||
Ngrok allows us to send the webhooks from Github to our local Drone setup.
|
||||
|
||||
Follow the guide here <https://dashboard.ngrok.com/get-started/setup>
|
||||
|
||||
### Running Drone
|
||||
|
||||
+ Move into the `drone/docker/compose/drone-github` folder.
|
||||
|
||||
+ Run Ngrok against port `8080` it will run in the foreground.
|
||||
|
||||
``` bash
|
||||
./ngrok http 8080
|
||||
```
|
||||
|
||||
Take note of the forwarding hostname this is your `DRONE_SERVER_PROXY_HOST` EG
|
||||
|
||||
``` bash
|
||||
Forwarding http://c834c33asdde.ngrok.io -> http://localhost:8080
|
||||
```
|
||||
|
||||
+ You will want to edit the Docker compose file `docker-compose.yml` updating in the following entries.
|
||||
|
||||
``` bash
|
||||
DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST} # taken from Ngrok
|
||||
DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} # taken from your Github oauth application
|
||||
DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET} # taken from your Github oauth application
|
||||
```
|
||||
|
||||
NB for `DRONE_SERVER_PROXY_HOST` do not include http/https.
|
||||
|
||||
+ Run docker compose
|
||||
|
||||
``` bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
Now you can go access the Drone ui at <http://localhost:8080>
|
@ -1,40 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
drone:
|
||||
image: drone/drone:latest
|
||||
ports:
|
||||
- "9000:80"
|
||||
environment:
|
||||
- DRONE_SERVER_HOST=localhost:9000
|
||||
- DRONE_SERVER_PROTO=http
|
||||
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
|
||||
- DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
|
||||
- DRONE_COOKIE_TIMEOUT=720h
|
||||
- DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID}
|
||||
- DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET}
|
||||
- DRONE_GITEA_SERVER=http://gitea:3000
|
||||
- DRONE_LOGS_DEBUG=true
|
||||
- DRONE_CRON_DISABLED=true
|
||||
volumes:
|
||||
- ./data:/data
|
||||
networks:
|
||||
- default
|
||||
- gitea
|
||||
runner:
|
||||
image: drone/drone-runner-docker:latest
|
||||
environment:
|
||||
- DRONE_RPC_HOST=drone
|
||||
- DRONE_RPC_PROTO=http
|
||||
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- default
|
||||
- gitea
|
||||
|
||||
networks:
|
||||
default:
|
||||
external: false
|
||||
gitea:
|
||||
external:
|
||||
name: gitea
|
@ -1,29 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
drone:
|
||||
image: drone/drone:latest
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- DRONE_SERVER_HOST=localhost:8080
|
||||
- DRONE_SERVER_PROTO=http
|
||||
- DRONE_SERVER_PROXY_HOST=${DRONE_SERVER_PROXY_HOST}
|
||||
- DRONE_SERVER_PROXY_PROTO=https
|
||||
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
|
||||
- DRONE_COOKIE_SECRET=e8206356c843d81e05ab6735e7ebf075
|
||||
- DRONE_COOKIE_TIMEOUT=720h
|
||||
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}
|
||||
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
|
||||
- DRONE_LOGS_DEBUG=true
|
||||
- DRONE_CRON_DISABLED=true
|
||||
volumes:
|
||||
- ./data:/data
|
||||
runner:
|
||||
image: drone/drone-runner-docker:latest
|
||||
environment:
|
||||
- DRONE_RPC_HOST=drone
|
||||
- DRONE_RPC_PROTO=http
|
||||
- DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6
|
||||
- DRONE_TMATE_ENABLED=true
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
@ -1,21 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- ROOT_URL=http://gitea:3000
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./data:/data
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "3022:22"
|
||||
|
||||
networks:
|
||||
gitea:
|
||||
name: gitea
|
||||
external: false
|
@ -1,43 +0,0 @@
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
|
||||
{{#if build.tags}}
|
||||
tags:
|
||||
{{#each build.tags}}
|
||||
- {{this}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
manifests:
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64
|
||||
platform:
|
||||
architecture: amd64
|
||||
os: linux
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64
|
||||
platform:
|
||||
architecture: arm64
|
||||
os: linux
|
||||
variant: v8
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm
|
||||
platform:
|
||||
architecture: arm
|
||||
os: linux
|
||||
variant: v7
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-1803-amd64
|
||||
platform:
|
||||
architecture: amd64
|
||||
os: windows
|
||||
variant: 1803
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-1809-amd64
|
||||
platform:
|
||||
architecture: amd64
|
||||
os: windows
|
||||
variant: 1809
|
||||
-
|
||||
image: drone/agent:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-1903-amd64
|
||||
platform:
|
||||
architecture: amd64
|
||||
os: windows
|
||||
variant: 1903
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user