From 4a4f5323a7f9b908a4b1607177124d5aec5bc4ed Mon Sep 17 00:00:00 2001 From: Antoine Date: Thu, 17 Sep 2020 00:37:33 +0200 Subject: [PATCH] add Model --- .gitignore | 2 + Makefile | 4 + misc/doc-gitlab-runner.md | 17 ++- misc/requests/post_webhook_gitea.txt | 115 ++++++++++++++++++ pom.xml | 5 + .../antoine_roux/wiki/ControllerHandlers.java | 14 +++ .../java/tk/antoine_roux/wiki/Permission.java | 10 ++ .../tk/antoine_roux/wiki/model/Commit.java | 22 ++++ .../tk/antoine_roux/wiki/model/HookEvent.java | 20 +++ .../wiki/model/InternalTracker.java | 15 +++ .../antoine_roux/wiki/model/Repository.java | 72 +++++++++++ .../antoine_roux/wiki/model/RunnerInfo.java | 37 ++++++ .../java/tk/antoine_roux/wiki/model/User.java | 25 ++++ .../antoine_roux/wiki/model/UserReduced.java | 10 ++ .../wiki/model/request/AddRunner.java | 6 + .../wiki/model/request/JobRequest.java | 10 ++ 16 files changed, 378 insertions(+), 6 deletions(-) create mode 100644 misc/requests/post_webhook_gitea.txt create mode 100644 src/main/java/tk/antoine_roux/wiki/Permission.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/Commit.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/HookEvent.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/InternalTracker.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/Repository.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/RunnerInfo.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/User.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/UserReduced.java create mode 100644 src/main/java/tk/antoine_roux/wiki/model/request/JobRequest.java diff --git a/.gitignore b/.gitignore index 4bfa550..aab87fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea/ *.iml target/ + +testGit/ diff --git a/Makefile b/Makefile index 7411a8c..e5ebcd1 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,10 @@ NATIVE_VERSION=1.0.0 +start-runner: + docker run -d --name gitlab-runner --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock \ + -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest + build: ./mvnw compile diff --git a/misc/doc-gitlab-runner.md b/misc/doc-gitlab-runner.md index d6159d9..18272cc 100644 --- a/misc/doc-gitlab-runner.md +++ b/misc/doc-gitlab-runner.md @@ -3,26 +3,31 @@ ## start gitlab runner ```shell script -$ docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest +docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest ``` ## register new runner ```shell script -$ gitlab-runner register -non-interactive --description "manualy registered gitlab runner" --url "http://172.17.0.1:8080/" --registration-token "3b79eb1f-32f3-4db2-ad1b-6 - 702e476d839" --tag-list "docker,manual" --executor shell +gitlab-runner register -non-interactive --description "manualy registered gitlab runner" --url "http://172.17.0.1:8080/" --registration-token "3b79eb1f-32f3-4db2-ad1b-6702e476d839" --tag-list "docker,manual" --executor shell ``` with curl ```shell script -$ curl --request POST -H 'Content-Type: application/json' "http://localhost:8080/api/v4/runners" -d '{"description":"manualy registered gitlab runner","tag_list":"docker,manual","run_untagged":false,"locked":true,"active":true,"info":{"name":"gitlab-runner","version":"13.3.1","revision":"738bbe5a","platform":"linux","architecture":"amd64","features":{"variables":false,"image":false,"services":false,"artifacts":false,"cache":false,"shared":false,"upload_multiple_artifacts":false,"upload_raw_artifacts":false,"session":false,"terminal":false,"refspecs":false,"masking":false,"proxy":false,"raw_variables":false,"artifacts_exclude":false,"multi_build_steps":false}},"token":"registration_token"}' +curl --request POST -H 'Content-Type: application/json' "http://localhost:8080/api/v4/runners" -d '{"description":"manualy registered gitlab runner","tag_list":"docker,manual","run_untagged":false,"locked":true,"active":true,"info":{"name":"gitlab-runner","version":"13.3.1","revision":"738bbe5a","platform":"linux","architecture":"amd64","features":{"variables":false,"image":false,"services":false,"artifacts":false,"cache":false,"shared":false,"upload_multiple_artifacts":false,"upload_raw_artifacts":false,"session":false,"terminal":false,"refspecs":false,"masking":false,"proxy":false,"raw_variables":false,"artifacts_exclude":false,"multi_build_steps":false}},"token":"registration_token"}' +``` + +## unregister runner + +```shell script +gitlab-runner unregister --url "http://172.17.0.1:8080/" --token "3b79eb1f-32f3-4db2-ad1b-6702e476d839" ``` ## list runners ```shell script -$ gitlab-runner list +gitlab-runner list ``` local listing : @@ -31,5 +36,5 @@ cf => /etc/gitlab-runner/config.toml ## verify which runner is always alive ```shell script -$ gitlab-runner verify --delete +gitlab-runner verify --delete ``` diff --git a/misc/requests/post_webhook_gitea.txt b/misc/requests/post_webhook_gitea.txt new file mode 100644 index 0000000..5b744d0 --- /dev/null +++ b/misc/requests/post_webhook_gitea.txt @@ -0,0 +1,115 @@ +{ + "secret": "toto", + "ref": "refs/heads/master", + "before": "1831a5d892851ec601c3f1b6c26245f18a9bcb58", + "after": "526300af0655f2eeb43c6dc553be4b64d96701c7", + "compare_url": "https://antoine-roux.ml/projects/antoine/testGit/compare/1831a5d892851ec601c3f1b6c26245f18a9bcb58...526300af0655f2eeb43c6dc553be4b64d96701c7", + "commits": [ + { + "id": "526300af0655f2eeb43c6dc553be4b64d96701c7", + "message": "test trigger webhook\n", + "url": "https://antoine-roux.ml/projects/antoine/testGit/commit/526300af0655f2eeb43c6dc553be4b64d96701c7", + "author": { + "name": "Antoine", + "email": "antoinroux@hotmail.fr", + "username": "antoine" + }, + "committer": { + "name": "Antoine", + "email": "antoinroux@hotmail.fr", + "username": "antoine" + }, + "verification": null, + "timestamp": "2020-09-16T23:23:16+02:00", + "added": [ + "toto" + ], + "removed": [], + "modified": [] + } + ], + "head_commit": null, + "repository": { + "id": 124, + "owner": { + "id": 1, + "login": "antoine", + "full_name": "", + "email": "antoinroux@hotmail.fr", + "avatar_url": "https://antoine-roux.ml/projects/user/avatar/antoine/-1", + "language": "fr-FR", + "is_admin": true, + "last_login": "2020-09-15T21:45:21Z", + "created": "2018-08-26T06:16:47Z", + "username": "antoine" + }, + "name": "testGit", + "full_name": "antoine/testGit", + "description": "repository for test some git feature", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 24, + "html_url": "https://antoine-roux.ml/projects/antoine/testGit", + "ssh_url": "gitolite@antoine-roux.ml:antoine/testGit.git", + "clone_url": "https://antoine-roux.ml/projects/antoine/testGit.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "master", + "archived": false, + "created_at": "2018-11-05T22:35:38Z", + "updated_at": "2020-09-16T21:23:48Z", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": false, + "allow_squash_merge": false, + "avatar_url": "" + }, + "pusher": { + "id": 1, + "login": "antoine", + "full_name": "", + "email": "antoinroux@hotmail.fr", + "avatar_url": "https://antoine-roux.ml/projects/user/avatar/antoine/-1", + "language": "fr-FR", + "is_admin": true, + "last_login": "2020-09-15T21:45:21Z", + "created": "2018-08-26T06:16:47Z", + "username": "antoine" + }, + "sender": { + "id": 1, + "login": "antoine", + "full_name": "", + "email": "antoinroux@hotmail.fr", + "avatar_url": "https://antoine-roux.ml/projects/user/avatar/antoine/-1", + "language": "fr-FR", + "is_admin": true, + "last_login": "2020-09-15T21:45:21Z", + "created": "2018-08-26T06:16:47Z", + "username": "antoine" + } +} diff --git a/pom.xml b/pom.xml index 9b99443..5750576 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ tk.antoine_roux.wiki.MainLauncher 0.8.0 20.2.0 + 2.11.2 @@ -59,6 +60,10 @@ org.springframework.boot spring-boot-starter-actuator + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + diff --git a/src/main/java/tk/antoine_roux/wiki/ControllerHandlers.java b/src/main/java/tk/antoine_roux/wiki/ControllerHandlers.java index 828c78d..f38b267 100644 --- a/src/main/java/tk/antoine_roux/wiki/ControllerHandlers.java +++ b/src/main/java/tk/antoine_roux/wiki/ControllerHandlers.java @@ -9,8 +9,10 @@ import org.springframework.web.bind.annotation.*; import tk.antoine_roux.wiki.annotation.ApiPrefix; import tk.antoine_roux.wiki.annotation.ApiVersion; import tk.antoine_roux.wiki.configuration.Exception.DeleteRunnerException; +import tk.antoine_roux.wiki.model.HookEvent; import tk.antoine_roux.wiki.model.Runner; import tk.antoine_roux.wiki.model.request.AddRunner; +import tk.antoine_roux.wiki.model.request.JobRequest; import tk.antoine_roux.wiki.model.request.TokenRunner; import tk.antoine_roux.wiki.model.response.RegisterRunnerResponse; import tk.antoine_roux.wiki.utilitary.Boolean; @@ -91,4 +93,16 @@ public class ControllerHandlers { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } } + + @ApiVersion(API_VERSION) + @PostMapping("/jobs/request") + public ResponseEntity jobRequest(@RequestBody JobRequest jobRequest) { + return ResponseEntity.ok().build(); + } + + @ApiVersion(API_VERSION) + @PostMapping("/webhook") + public ResponseEntity webhook(@RequestBody HookEvent webHookData) { + return ResponseEntity.ok().build(); + } } diff --git a/src/main/java/tk/antoine_roux/wiki/Permission.java b/src/main/java/tk/antoine_roux/wiki/Permission.java new file mode 100644 index 0000000..7db4a1a --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/Permission.java @@ -0,0 +1,10 @@ +package tk.antoine_roux.wiki; + +/** + * model about repository permission + */ +public class Permission { + public boolean admin; + public boolean push; + public boolean pull; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/Commit.java b/src/main/java/tk/antoine_roux/wiki/model/Commit.java new file mode 100644 index 0000000..23fa838 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/Commit.java @@ -0,0 +1,22 @@ +package tk.antoine_roux.wiki.model; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.time.ZonedDateTime; +import java.util.List; + +public class Commit { + public String id; + public String message; + public String url; + public UserReduced author; + public UserReduced committer; + public String verification; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssXXX") + public ZonedDateTime timestamp; + + public List added; + public List removed; + public List modified; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/HookEvent.java b/src/main/java/tk/antoine_roux/wiki/model/HookEvent.java new file mode 100644 index 0000000..5b16301 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/HookEvent.java @@ -0,0 +1,20 @@ +package tk.antoine_roux.wiki.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +public class HookEvent { + public String secret; + public String ref; + public String before; + public String after; + @JsonProperty("compare_url") + public String compareUrl; + public List commits; + @JsonProperty("head_commit") + public String headCommit; + public Repository repository; + public User pusher; + public User sender; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/InternalTracker.java b/src/main/java/tk/antoine_roux/wiki/model/InternalTracker.java new file mode 100644 index 0000000..d395f52 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/InternalTracker.java @@ -0,0 +1,15 @@ +package tk.antoine_roux.wiki.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * model representation of gitea tracker + */ +public class InternalTracker { + @JsonProperty("enable_time_tracker") + public boolean enableTimeTracker; + @JsonProperty("allow_only_contributors_to_track_time") + public boolean allowOnlyContributorsToTrackTime; + @JsonProperty("enable_issue_dependencies") + public boolean enableIssueDependencies; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/Repository.java b/src/main/java/tk/antoine_roux/wiki/model/Repository.java new file mode 100644 index 0000000..a846934 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/Repository.java @@ -0,0 +1,72 @@ +package tk.antoine_roux.wiki.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import tk.antoine_roux.wiki.Permission; + +import java.time.ZonedDateTime; + +public class Repository { + public String id; + public User owner; + public String name; + @JsonProperty("full_name") + public String fullName; + public String description; + public boolean empty; + @JsonProperty("private") + public boolean isPrivate; + public boolean fork; + public boolean template; + public String parent; + public boolean mirror; + public int size; + @JsonProperty("html_url") + public String htmlUrl; + @JsonProperty("ssh_url") + public String sshUrl; + @JsonProperty("clone_url") + public String cloneUrl; + @JsonProperty("original_url") + public String originalUrl; + public String website; + @JsonProperty("stars_count") + public int starsCount; + @JsonProperty("forks_count") + public int forksCount; + @JsonProperty("watchers_count") + public int watchersCount; + @JsonProperty("open_issues_count") + public int openIssuesCount; + @JsonProperty("open_pr_count") + public int openPRCount; + @JsonProperty("release_counter") + public int releaseCounter; + @JsonProperty("default_branch") + public String defaultBranch; + public boolean archived; + @JsonProperty("created_at") + public ZonedDateTime createdAt; + @JsonProperty("updated_at") + public ZonedDateTime updatedAt; + public Permission permissions; + @JsonProperty("has_issues") + public boolean hasIssues; + @JsonProperty("internal_tracker") + public InternalTracker internalTracker; + @JsonProperty("has_wiki") + public boolean hasWiki; + @JsonProperty("has_pull_requests") + public boolean hasPullRequests; + @JsonProperty("ignore_whitespace_conflicts") + public boolean ignoreWhitespaceConflicts; + @JsonProperty("allow_merge_commits") + public boolean allowMergeCommits; + @JsonProperty("allow_rebase") + public boolean allowRebase; + @JsonProperty("allow_rebase_explicit") + public boolean allowRebaseExplicit; + @JsonProperty("allow_squash_merge") + public boolean allowSquashMerge; + @JsonProperty("avatar_url") + public String avatarUrl; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/RunnerInfo.java b/src/main/java/tk/antoine_roux/wiki/model/RunnerInfo.java new file mode 100644 index 0000000..ff3aab0 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/RunnerInfo.java @@ -0,0 +1,37 @@ +package tk.antoine_roux.wiki.model; + +import java.util.Map; + +public class RunnerInfo { + + public String name; + public String version; + public String revision; + public String platform; + public String architecture; + public String executor; + public String shell; + + /** + * features can contains : + *
    + *
  • variables
  • + *
  • image
  • + *
  • services
  • + *
  • artifacts
  • + *
  • cache
  • + *
  • shared
  • + *
  • upload_multiple_artifacts
  • + *
  • upload_raw_artifacts
  • + *
  • session
  • + *
  • terminal
  • + *
  • refspecs
  • + *
  • masking
  • + *
  • proxy
  • + *
  • raw_variables
  • + *
  • artifacts_exclude
  • + *
  • multi_build_steps
  • + *
+ */ + public Map features; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/User.java b/src/main/java/tk/antoine_roux/wiki/model/User.java new file mode 100644 index 0000000..386a59e --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/User.java @@ -0,0 +1,25 @@ +package tk.antoine_roux.wiki.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.time.ZonedDateTime; + +/** + * pusher sender user information + */ +public class User { + public String id; + public String login; + public String username; + @JsonProperty("full_name") + public String fullName; + public String email; + @JsonProperty("avatar_url") + public String avatarUrl; + public String language; + @JsonProperty("is_admin") + public boolean isAdmin; + @JsonProperty("last_login") + public ZonedDateTime lastLogin; + public ZonedDateTime created; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/UserReduced.java b/src/main/java/tk/antoine_roux/wiki/model/UserReduced.java new file mode 100644 index 0000000..9b54dec --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/UserReduced.java @@ -0,0 +1,10 @@ +package tk.antoine_roux.wiki.model; + +/** + * Reduced user information + */ +public class UserReduced { + public String name; + public String email; + public String username; +} diff --git a/src/main/java/tk/antoine_roux/wiki/model/request/AddRunner.java b/src/main/java/tk/antoine_roux/wiki/model/request/AddRunner.java index f0afb5b..4a17a76 100644 --- a/src/main/java/tk/antoine_roux/wiki/model/request/AddRunner.java +++ b/src/main/java/tk/antoine_roux/wiki/model/request/AddRunner.java @@ -1,6 +1,7 @@ package tk.antoine_roux.wiki.model.request; import com.fasterxml.jackson.annotation.JsonProperty; +import tk.antoine_roux.wiki.model.RunnerInfo; import java.util.Arrays; import java.util.List; @@ -15,6 +16,11 @@ public class AddRunner { public String description; public List tags; public UUID token; + @JsonProperty("run_untagged") + public Boolean runUntagged; + public Boolean locked; + public Boolean active; + public RunnerInfo info; @JsonProperty("tag_list") public void setTags(String tags) { diff --git a/src/main/java/tk/antoine_roux/wiki/model/request/JobRequest.java b/src/main/java/tk/antoine_roux/wiki/model/request/JobRequest.java new file mode 100644 index 0000000..82662e9 --- /dev/null +++ b/src/main/java/tk/antoine_roux/wiki/model/request/JobRequest.java @@ -0,0 +1,10 @@ +package tk.antoine_roux.wiki.model.request; + +import tk.antoine_roux.wiki.model.RunnerInfo; + +/** + * Job Request compose from {@link RunnerInfo} and token field + */ +public class JobRequest extends TokenRunner { + public RunnerInfo info; +}