Compare commits

..

11 Commits

Author SHA1 Message Date
Bo-Yi Wu 742e20ea9c update docs
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:30:04 +08:00
Bo-Yi Wu 6ca333982b add arch
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:27:34 +08:00
Bo-Yi Wu 5e1b16bcf5 update docs
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:26:48 +08:00
Bo-Yi Wu 7b357075fe add arch
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:24:02 +08:00
Bo-Yi Wu bd482e9c7a docs: update
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:08:41 +08:00
Bo-Yi Wu 0d110e195c docs: update 2019-09-30 07:52:18 +08:00
Bo-Yi Wu 7441ec1d9b chore: upgrade go module 2019-09-30 07:47:20 +08:00
Bo-Yi Wu ee6e15d448 chore: support github actions 2019-09-30 07:45:18 +08:00
Bo-Yi Wu e8184fbb5c chore: upgrade to go1.13 2019-09-30 07:43:28 +08:00
Bo-Yi Wu 326b4c2dc5 chore(docker): replace ADD with COPY 2019-03-04 21:43:41 +08:00
Bo-Yi Wu e70b95f505 chore: add lint check
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-03-04 16:12:01 +08:00
12 changed files with 117 additions and 171 deletions
+37 -48
View File
@@ -9,34 +9,38 @@ platform:
steps:
- name: vet
pull: always
image: golang:1.12
image: golang:1.13
commands:
- make vet
environment:
GO111MODULE: on
volumes:
- name: gopath
path: /go
- name: lint
pull: always
image: golang:1.13
commands:
- make lint
volumes:
- name: gopath
path: /go
- name: misspell
pull: always
image: golang:1.12
image: golang:1.13
commands:
- make misspell-check
environment:
GO111MODULE: on
volumes:
- name: gopath
path: /go
- name: test
pull: always
image: golang:1.12
image: golang:1.13
commands:
- make test
- make coverage
environment:
GO111MODULE: on
WEBHOOK_ID:
from_secret: webhook_id
WEBHOOK_TOKEN:
@@ -67,12 +71,11 @@ platform:
steps:
- name: build-push
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/amd64/drone-jenkins"
- go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/amd64/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
exclude:
@@ -80,19 +83,18 @@ steps:
- name: build-tag
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/amd64/drone-jenkins"
- go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/amd64/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
- tag
- name: executable
pull: always
image: golang:1.12
image: golang:1.13
commands:
- ./release/linux/amd64/drone-jenkins --help
@@ -131,8 +133,8 @@ steps:
trigger:
ref:
- refs/heads/master
- "refs/pull/**"
- "refs/tags/**"
- refs/pull/**
- refs/tags/**
depends_on:
- testing
@@ -148,12 +150,11 @@ platform:
steps:
- name: build-push
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm64/drone-jenkins"
- go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm64/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
exclude:
@@ -161,19 +162,18 @@ steps:
- name: build-tag
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm64/drone-jenkins"
- go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm64/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
- tag
- name: executable
pull: always
image: golang:1.12
image: golang:1.13
commands:
- ./release/linux/arm64/drone-jenkins --help
@@ -212,8 +212,8 @@ steps:
trigger:
ref:
- refs/heads/master
- "refs/pull/**"
- "refs/tags/**"
- refs/pull/**
- refs/tags/**
depends_on:
- testing
@@ -229,12 +229,11 @@ platform:
steps:
- name: build-push
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm/drone-jenkins"
- go build -v -ldflags '-X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
exclude:
@@ -242,19 +241,18 @@ steps:
- name: build-tag
pull: always
image: golang:1.12
image: golang:1.13
commands:
- "go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm/drone-jenkins"
- go build -v -ldflags '-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}' -a -o release/linux/arm/drone-jenkins
environment:
CGO_ENABLED: 0
GO111MODULE: on
when:
event:
- tag
- name: executable
pull: always
image: golang:1.12
image: golang:1.13
commands:
- ./release/linux/arm/drone-jenkins --help
@@ -293,8 +291,8 @@ steps:
trigger:
ref:
- refs/heads/master
- "refs/pull/**"
- "refs/tags/**"
- refs/pull/**
- refs/tags/**
depends_on:
- testing
@@ -310,11 +308,9 @@ platform:
steps:
- name: build-all-binary
pull: always
image: golang:1.12
image: golang:1.13
commands:
- make release
environment:
GO111MODULE: on
when:
event:
- tag
@@ -326,14 +322,14 @@ steps:
api_key:
from_secret: github_release_api_key
files:
- "dist/release/*"
- dist/release/*
when:
event:
- tag
trigger:
ref:
- "refs/tags/**"
- refs/tags/**
depends_on:
- testing
@@ -358,17 +354,10 @@ steps:
username:
from_secret: docker_username
- name: microbadger
pull: always
image: plugins/webhook:1
settings:
url:
from_secret: microbadger_url
trigger:
ref:
- refs/heads/master
- "refs/tags/**"
- refs/tags/**
depends_on:
- linux-amd64
+10 -26
View File
@@ -11,35 +11,20 @@ image: appleboy/drone-jenkins
The Jenkins plugin allows you to trigger Jenkins job automatically. The below pipeline configuration demonstrates simple usage:
```yaml
pipeline:
jenkins:
image: appleboy/drone-jenkins
- name: trigger job
image: appleboy/drone-jenkins
settings:
url: http://example.com
user: appleboy
token: xxxxxxxxxx
job: drone-jenkins-plugin-job
```
Example configuration for success builds:
```diff
pipeline:
jenkins:
image: appleboy/drone-jenkins
url: http://example.com
user: appleboy
token: xxxxxxxxxx
job: drone-jenkins-plugin-job
+ when:
+ status: [ success ]
```
Example configuration with multiple jobs:
```yaml
pipeline:
jenkins:
image: appleboy/drone-jenkins
```diff
image: appleboy/drone-jenkins
settings:
url: http://example.com
user: appleboy
token: xxxxxxxxxx
@@ -50,10 +35,9 @@ pipeline:
Example configuration with jobs in the folder:
```yaml
pipeline:
jenkins:
image: appleboy/drone-jenkins
```diff
image: appleboy/drone-jenkins
settings:
url: http://example.com
user: appleboy
token: xxxxxxxxxx
@@ -62,7 +46,7 @@ pipeline:
It will trigger the URL of Jenkins job like as `http://example.com/job/folder_name/job/job_name/`
# Parameter Reference
## Parameter Reference
url
: jenkins server base url.
+2 -2
View File
@@ -6,7 +6,7 @@ GO ?= go
# for dockerhub
DEPLOY_ACCOUNT := appleboy
DEPLOY_IMAGE := $(EXECUTABLE)
ARCHS ?= amd64 386
TARGETS ?= linux darwin windows
PACKAGES ?= $(shell $(GO) list ./...)
SOURCES ?= $(shell find . -name "*.go" -type f)
@@ -83,7 +83,7 @@ release-build:
@which gox > /dev/null; if [ $$? -ne 0 ]; then \
$(GO) get -u github.com/mitchellh/gox; \
fi
gox -os="$(TARGETS)" -tags="$(TAGS)" -ldflags="-s -w $(LDFLAGS)" -output="$(DIST)/binaries/$(EXECUTABLE)-$(VERSION)-{{.OS}}-{{.Arch}}"
gox -os="$(TARGETS)" -arch="$(ARCHS)" -tags="$(TAGS)" -ldflags="-s -w $(LDFLAGS)" -output="$(DIST)/binaries/$(EXECUTABLE)-$(VERSION)-{{.OS}}-{{.Arch}}"
release-copy:
$(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));)
+17 -38
View File
@@ -1,13 +1,13 @@
<img src="images/logo.png">
# drone-jenkins
[![GoDoc](https://godoc.org/github.com/appleboy/drone-jenkins?status.svg)](https://godoc.org/github.com/appleboy/drone-jenkins)
![logo](./images/logo.png)
[![GoDoc](https://godoc.org/github.com/appleboy/drone-jenkins?status.svg)](https://godoc.org/github.com/appleboy/drone-jenkins)
[![Build Status](https://cloud.drone.io/api/badges/appleboy/drone-jenkins/status.svg)](https://cloud.drone.io/appleboy/drone-jenkins)
[![codecov](https://codecov.io/gh/appleboy/drone-jenkins/branch/master/graph/badge.svg)](https://codecov.io/gh/appleboy/drone-jenkins)
[![Go Report Card](https://goreportcard.com/badge/github.com/appleboy/drone-jenkins)](https://goreportcard.com/report/github.com/appleboy/drone-jenkins)
[![Docker Pulls](https://img.shields.io/docker/pulls/appleboy/drone-jenkins.svg)](https://hub.docker.com/r/appleboy/drone-jenkins/)
[![](https://images.microbadger.com/badges/image/appleboy/drone-jenkins.svg)](https://microbadger.com/images/appleboy/drone-jenkins "Get your own image badge on microbadger.com")
[![codecov](https://codecov.io/gh/appleboy/drone-jenkins/branch/master/graph/badge.svg)](https://codecov.io/gh/appleboy/drone-jenkins)
[![Go Report Card](https://goreportcard.com/badge/github.com/appleboy/drone-jenkins)](https://goreportcard.com/report/github.com/appleboy/drone-jenkins)
[![Docker Pulls](https://img.shields.io/docker/pulls/appleboy/drone-jenkins.svg)](https://hub.docker.com/r/appleboy/drone-jenkins/)
[![microbadger](https://images.microbadger.com/badges/image/appleboy/drone-jenkins.svg)](https://microbadger.com/images/appleboy/drone-jenkins "Get your own image badge on microbadger.com")
[Drone](https://github.com/drone/drone) plugin for trigger [Jenkins](https://jenkins.io/) jobs.
@@ -26,7 +26,7 @@ $ docker run \
Please make sure that you create the `/data/jenkins` before starting the Jenkins. Create the new API token as below:
<img src="images/jenkins-token.png">
![jenkins token](./images/jenkins-token.png)
## Build or Download a binary
@@ -38,47 +38,28 @@ The pre-compiled binaries can be downloaded from [release page](https://github.c
With `Go` installed
```sh
go get -u -v github.com/appleboy/drone-jenkins
```
$ go get -u -v github.com/appleboy/drone-jenkins
```
or build the binary with the following command:
```
$ make build
```sh
make build
```
## Docker
Build the docker image with the following commands:
```
$ make docker
```
Please note incorrectly building the image for the correct x64 linux and with
GCO disabled will result in an error when running the Docker image:
```
docker: Error response from daemon: Container command
'/bin/drone-jenkins' not found or does not exist..
```sh
make docker
```
## Usage
There are three ways to trigger jenkins jobs.
- [drone-jenkins](#drone-jenkins)
- [Setup the Jenkins Server](#setup-the-jenkins-server)
- [Build or Download a binary](#build-or-download-a-binary)
- [Docker](#docker)
- [Usage](#usage)
- [Usage from binary](#usage-from-binary)
- [Usage from docker](#usage-from-docker)
- [Usage from drone ci](#usage-from-drone-ci)
- [Testing](#testing)
<a name="usage-from-binary"></a>
### Usage from binary
trigger single job.
@@ -102,7 +83,6 @@ drone-jenkins \
--job drone-jenkins-plugin-2
```
<a name="usage-from-docker"></a>
### Usage from docker
trigger single job.
@@ -127,12 +107,11 @@ docker run --rm \
appleboy/drone-jenkins
```
<a name="usage-from-drone-ci"></a>
### Usage from drone ci
Execute from the working directory:
```
```sh
docker run --rm \
-e PLUGIN_URL=http://example.com \
-e PLUGIN_USER=xxxxxxx \
@@ -149,6 +128,6 @@ You can get more [information](DOCS.md) about how to use scp plugin in drone.
Test the package with the following command:
```
$ make test
```sh
make test
```
+1 -1
View File
@@ -5,6 +5,6 @@ LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
org.label-schema.vendor="Bo-Yi Wu" \
org.label-schema.schema-version="1.0"
ADD release/linux/amd64/drone-jenkins /bin/
COPY release/linux/amd64/drone-jenkins /bin/
ENTRYPOINT ["/bin/drone-jenkins"]
+1 -1
View File
@@ -5,6 +5,6 @@ LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
org.label-schema.vendor="Bo-Yi Wu" \
org.label-schema.schema-version="1.0"
ADD release/linux/arm/drone-jenkins /bin/
COPY release/linux/arm/drone-jenkins /bin/
ENTRYPOINT ["/bin/drone-jenkins"]
+1 -1
View File
@@ -5,6 +5,6 @@ LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
org.label-schema.vendor="Bo-Yi Wu" \
org.label-schema.schema-version="1.0"
ADD release/linux/arm64/drone-jenkins /bin/
COPY release/linux/arm64/drone-jenkins /bin/
ENTRYPOINT ["/bin/drone-jenkins"]
+2 -1
View File
@@ -5,5 +5,6 @@ LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
org.label-schema.vendor="Bo-Yi Wu" \
org.label-schema.schema-version="1.0"
ADD release/drone-jenkins.exe /drone-jenkins.exe
COPY release/drone-jenkins.exe /drone-jenkins.exe
ENTRYPOINT [ "\\drone-jenkins.exe" ]
+3 -3
View File
@@ -1,9 +1,9 @@
module github.com/appleboy/drone-jenkins
go 1.12
go 1.13
require (
github.com/joho/godotenv v1.3.0
github.com/stretchr/testify v1.3.0
github.com/urfave/cli v1.20.0
github.com/stretchr/testify v1.4.0
github.com/urfave/cli v1.22.1
)
+18 -2
View File
@@ -1,6 +1,22 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+4 -4
View File
@@ -29,22 +29,22 @@ func main() {
cli.StringFlag{
Name: "host",
Usage: "jenkins base url",
EnvVar: "PLUGIN_URL,JENKINS_URL",
EnvVar: "PLUGIN_URL,JENKINS_URL,INPUT_URL",
},
cli.StringFlag{
Name: "user,u",
Usage: "jenkins username",
EnvVar: "PLUGIN_USER,JENKINS_USER",
EnvVar: "PLUGIN_USER,JENKINS_USER,INPUT_USER",
},
cli.StringFlag{
Name: "token,t",
Usage: "jenkins token",
EnvVar: "PLUGIN_TOKEN,JENKINS_TOKEN",
EnvVar: "PLUGIN_TOKEN,JENKINS_TOKEN,INPUT_TOKEN",
},
cli.StringSliceFlag{
Name: "job,j",
Usage: "jenkins job",
EnvVar: "PLUGIN_JOB,JENKINS_JOB",
EnvVar: "PLUGIN_JOB,JENKINS_JOB,INPUT_JOB",
},
cli.StringFlag{
Name: "env-file",
+21 -44
View File
@@ -9,11 +9,8 @@
steps: [
{
name: 'vet',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
GO111MODULE: 'on',
},
commands: [
'make vet',
],
@@ -24,30 +21,24 @@
},
],
},
// {
// name: 'lint',
// image: 'golang:1.12',
// pull: 'always',
// environment: {
// GO111MODULE: 'on',
// },
// commands: [
// 'make lint',
// ],
// volumes: [
// {
// name: 'gopath',
// path: '/go',
// },
// ],
// },
{
name: 'lint',
image: 'golang:1.13',
pull: 'always',
commands: [
'make lint',
],
volumes: [
{
name: 'gopath',
path: '/go',
},
],
},
{
name: 'misspell',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
GO111MODULE: 'on',
},
commands: [
'make misspell-check',
],
@@ -60,10 +51,9 @@
},
{
name: 'test',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
GO111MODULE: 'on',
WEBHOOK_ID: { 'from_secret': 'webhook_id' },
WEBHOOK_TOKEN: { 'from_secret': 'webhook_token' },
},
@@ -105,11 +95,10 @@
steps: [
{
name: 'build-push',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
CGO_ENABLED: '0',
GO111MODULE: 'on',
},
commands: [
'go build -v -ldflags \'-X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name,
@@ -122,11 +111,10 @@
},
{
name: 'build-tag',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
CGO_ENABLED: '0',
GO111MODULE: 'on',
},
commands: [
'go build -v -ldflags \'-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name,
@@ -137,7 +125,7 @@
},
{
name: 'executable',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
commands: [
'./release/' + os + '/' + arch + '/' + name + ' --help',
@@ -202,11 +190,8 @@
steps: [
{
name: 'build-all-binary',
image: 'golang:1.12',
image: 'golang:1.13',
pull: 'always',
environment: {
GO111MODULE: 'on',
},
commands: [
'make release'
],
@@ -256,14 +241,6 @@
ignore_missing: true,
},
},
{
name: 'microbadger',
image: 'plugins/webhook:1',
pull: 'always',
settings: {
url: { 'from_secret': 'microbadger_url' },
},
},
],
depends_on: depends_on,
trigger: {