nicolaferraro closed pull request #223: new builder
URL: https://github.com/apache/camel-k/pull/223
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/deploy/resources.go b/deploy/resources.go
index 58bfc75..72a4f7c 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -46,7 +46,7 @@ artifacts:
camel-ahc:
groupId: org.apache.camel
artifactId: camel-ahc
- version: 2.22.1
+ version: 2.22.2
schemes:
- ahc
languages: []
@@ -54,7 +54,7 @@ artifacts:
camel-ahc-ws:
groupId: org.apache.camel
artifactId: camel-ahc-ws
- version: 2.22.1
+ version: 2.22.2
schemes:
- ahc-ws
- ahc-wss
@@ -63,7 +63,7 @@ artifacts:
camel-amqp:
groupId: org.apache.camel
artifactId: camel-amqp
- version: 2.22.1
+ version: 2.22.2
schemes:
- amqp
languages: []
@@ -71,7 +71,7 @@ artifacts:
camel-apns:
groupId: org.apache.camel
artifactId: camel-apns
- version: 2.22.1
+ version: 2.22.2
schemes:
- apns
languages: []
@@ -79,7 +79,7 @@ artifacts:
camel-as2:
groupId: org.apache.camel
artifactId: camel-as2
- version: 2.22.1
+ version: 2.22.2
schemes:
- as2
languages: []
@@ -87,7 +87,7 @@ artifacts:
camel-asterisk:
groupId: org.apache.camel
artifactId: camel-asterisk
- version: 2.22.1
+ version: 2.22.2
schemes:
- asterisk
languages: []
@@ -95,7 +95,7 @@ artifacts:
camel-atmos:
groupId: org.apache.camel
artifactId: camel-atmos
- version: 2.22.1
+ version: 2.22.2
schemes:
- atmos
languages: []
@@ -103,7 +103,7 @@ artifacts:
camel-atmosphere-websocket:
groupId: org.apache.camel
artifactId: camel-atmosphere-websocket
- version: 2.22.1
+ version: 2.22.2
schemes:
- atmosphere-websocket
languages: []
@@ -111,7 +111,7 @@ artifacts:
camel-atom:
groupId: org.apache.camel
artifactId: camel-atom
- version: 2.22.1
+ version: 2.22.2
schemes:
- atom
languages: []
@@ -119,7 +119,7 @@ artifacts:
camel-atomix:
groupId: org.apache.camel
artifactId: camel-atomix
- version: 2.22.1
+ version: 2.22.2
schemes:
- atomix-map
- atomix-messaging
@@ -132,7 +132,7 @@ artifacts:
camel-avro:
groupId: org.apache.camel
artifactId: camel-avro
- version: 2.22.1
+ version: 2.22.2
schemes:
- avro
languages: []
@@ -141,7 +141,7 @@ artifacts:
camel-aws:
groupId: org.apache.camel
artifactId: camel-aws
- version: 2.22.1
+ version: 2.22.2
schemes:
- aws-cw
- aws-ddb
@@ -163,7 +163,7 @@ artifacts:
camel-azure:
groupId: org.apache.camel
artifactId: camel-azure
- version: 2.22.1
+ version: 2.22.2
schemes:
- azure-blob
- azure-queue
@@ -172,7 +172,7 @@ artifacts:
camel-core:
groupId: org.apache.camel
artifactId: camel-core
- version: 2.22.1
+ version: 2.22.2
schemes:
- bean
- binding
@@ -219,7 +219,7 @@ artifacts:
camel-bean-validator:
groupId: org.apache.camel
artifactId: camel-bean-validator
- version: 2.22.1
+ version: 2.22.2
schemes:
- bean-validator
languages: []
@@ -227,7 +227,7 @@ artifacts:
camel-beanstalk:
groupId: org.apache.camel
artifactId: camel-beanstalk
- version: 2.22.1
+ version: 2.22.2
schemes:
- beanstalk
languages: []
@@ -235,7 +235,7 @@ artifacts:
camel-bonita:
groupId: org.apache.camel
artifactId: camel-bonita
- version: 2.22.1
+ version: 2.22.2
schemes:
- bonita
languages: []
@@ -243,7 +243,7 @@ artifacts:
camel-box:
groupId: org.apache.camel
artifactId: camel-box
- version: 2.22.1
+ version: 2.22.2
schemes:
- box
languages: []
@@ -251,7 +251,7 @@ artifacts:
camel-braintree:
groupId: org.apache.camel
artifactId: camel-braintree
- version: 2.22.1
+ version: 2.22.2
schemes:
- braintree
languages: []
@@ -259,7 +259,7 @@ artifacts:
camel-cache:
groupId: org.apache.camel
artifactId: camel-cache
- version: 2.22.1
+ version: 2.22.2
schemes:
- cache
languages: []
@@ -267,7 +267,7 @@ artifacts:
camel-caffeine:
groupId: org.apache.camel
artifactId: camel-caffeine
- version: 2.22.1
+ version: 2.22.2
schemes:
- caffeine-cache
- caffeine-loadcache
@@ -276,7 +276,7 @@ artifacts:
camel-chronicle:
groupId: org.apache.camel
artifactId: camel-chronicle
- version: 2.22.1
+ version: 2.22.2
schemes:
- chronicle-engine
languages: []
@@ -284,7 +284,7 @@ artifacts:
camel-chunk:
groupId: org.apache.camel
artifactId: camel-chunk
- version: 2.22.1
+ version: 2.22.2
schemes:
- chunk
languages: []
@@ -292,7 +292,7 @@ artifacts:
camel-cm-sms:
groupId: org.apache.camel
artifactId: camel-cm-sms
- version: 2.22.1
+ version: 2.22.2
schemes:
- cm-sms
languages: []
@@ -300,7 +300,7 @@ artifacts:
camel-cmis:
groupId: org.apache.camel
artifactId: camel-cmis
- version: 2.22.1
+ version: 2.22.2
schemes:
- cmis
languages: []
@@ -308,7 +308,7 @@ artifacts:
camel-coap:
groupId: org.apache.camel
artifactId: camel-coap
- version: 2.22.1
+ version: 2.22.2
schemes:
- coap
languages: []
@@ -316,7 +316,7 @@ artifacts:
camel-cometd:
groupId: org.apache.camel
artifactId: camel-cometd
- version: 2.22.1
+ version: 2.22.2
schemes:
- cometd
- cometds
@@ -325,7 +325,7 @@ artifacts:
camel-consul:
groupId: org.apache.camel
artifactId: camel-consul
- version: 2.22.1
+ version: 2.22.2
schemes:
- consul
languages: []
@@ -333,7 +333,7 @@ artifacts:
camel-context:
groupId: org.apache.camel
artifactId: camel-context
- version: 2.22.1
+ version: 2.22.2
schemes:
- context
languages: []
@@ -341,7 +341,7 @@ artifacts:
camel-couchbase:
groupId: org.apache.camel
artifactId: camel-couchbase
- version: 2.22.1
+ version: 2.22.2
schemes:
- couchbase
languages: []
@@ -349,7 +349,7 @@ artifacts:
camel-couchdb:
groupId: org.apache.camel
artifactId: camel-couchdb
- version: 2.22.1
+ version: 2.22.2
schemes:
- couchdb
languages: []
@@ -357,7 +357,7 @@ artifacts:
camel-cassandraql:
groupId: org.apache.camel
artifactId: camel-cassandraql
- version: 2.22.1
+ version: 2.22.2
schemes:
- cql
languages: []
@@ -365,7 +365,7 @@ artifacts:
camel-crypto:
groupId: org.apache.camel
artifactId: camel-crypto
- version: 2.22.1
+ version: 2.22.2
schemes:
- crypto
languages: []
@@ -375,7 +375,7 @@ artifacts:
camel-crypto-cms:
groupId: org.apache.camel
artifactId: camel-crypto-cms
- version: 2.22.1
+ version: 2.22.2
schemes:
- crypto-cms
languages: []
@@ -383,7 +383,7 @@ artifacts:
camel-cxf:
groupId: org.apache.camel
artifactId: camel-cxf
- version: 2.22.1
+ version: 2.22.2
schemes:
- cxf
- cxfrs
@@ -392,7 +392,7 @@ artifacts:
camel-digitalocean:
groupId: org.apache.camel
artifactId: camel-digitalocean
- version: 2.22.1
+ version: 2.22.2
schemes:
- digitalocean
languages: []
@@ -400,7 +400,7 @@ artifacts:
camel-disruptor:
groupId: org.apache.camel
artifactId: camel-disruptor
- version: 2.22.1
+ version: 2.22.2
schemes:
- disruptor
- disruptor-vm
@@ -409,7 +409,7 @@ artifacts:
camel-dns:
groupId: org.apache.camel
artifactId: camel-dns
- version: 2.22.1
+ version: 2.22.2
schemes:
- dns
languages: []
@@ -417,7 +417,7 @@ artifacts:
camel-docker:
groupId: org.apache.camel
artifactId: camel-docker
- version: 2.22.1
+ version: 2.22.2
schemes:
- docker
languages: []
@@ -425,7 +425,7 @@ artifacts:
camel-dozer:
groupId: org.apache.camel
artifactId: camel-dozer
- version: 2.22.1
+ version: 2.22.2
schemes:
- dozer
languages: []
@@ -433,7 +433,7 @@ artifacts:
camel-drill:
groupId: org.apache.camel
artifactId: camel-drill
- version: 2.22.1
+ version: 2.22.2
schemes:
- drill
languages: []
@@ -441,7 +441,7 @@ artifacts:
camel-dropbox:
groupId: org.apache.camel
artifactId: camel-dropbox
- version: 2.22.1
+ version: 2.22.2
schemes:
- dropbox
languages: []
@@ -449,7 +449,7 @@ artifacts:
camel-ehcache:
groupId: org.apache.camel
artifactId: camel-ehcache
- version: 2.22.1
+ version: 2.22.2
schemes:
- ehcache
languages: []
@@ -457,7 +457,7 @@ artifacts:
camel-ejb:
groupId: org.apache.camel
artifactId: camel-ejb
- version: 2.22.1
+ version: 2.22.2
schemes:
- ejb
languages: []
@@ -465,7 +465,7 @@ artifacts:
camel-elasticsearch:
groupId: org.apache.camel
artifactId: camel-elasticsearch
- version: 2.22.1
+ version: 2.22.2
schemes:
- elasticsearch
languages: []
@@ -473,7 +473,7 @@ artifacts:
camel-elasticsearch-rest:
groupId: org.apache.camel
artifactId: camel-elasticsearch-rest
- version: 2.22.1
+ version: 2.22.2
schemes:
- elasticsearch-rest
languages: []
@@ -481,7 +481,7 @@ artifacts:
camel-elasticsearch5:
groupId: org.apache.camel
artifactId: camel-elasticsearch5
- version: 2.22.1
+ version: 2.22.2
schemes:
- elasticsearch5
languages: []
@@ -489,7 +489,7 @@ artifacts:
camel-elsql:
groupId: org.apache.camel
artifactId: camel-elsql
- version: 2.22.1
+ version: 2.22.2
schemes:
- elsql
languages: []
@@ -497,7 +497,7 @@ artifacts:
camel-etcd:
groupId: org.apache.camel
artifactId: camel-etcd
- version: 2.22.1
+ version: 2.22.2
schemes:
- etcd
languages: []
@@ -505,7 +505,7 @@ artifacts:
camel-eventadmin:
groupId: org.apache.camel
artifactId: camel-eventadmin
- version: 2.22.1
+ version: 2.22.2
schemes:
- eventadmin
languages: []
@@ -513,7 +513,7 @@ artifacts:
camel-exec:
groupId: org.apache.camel
artifactId: camel-exec
- version: 2.22.1
+ version: 2.22.2
schemes:
- exec
languages: []
@@ -521,7 +521,7 @@ artifacts:
camel-facebook:
groupId: org.apache.camel
artifactId: camel-facebook
- version: 2.22.1
+ version: 2.22.2
schemes:
- facebook
languages: []
@@ -529,7 +529,7 @@ artifacts:
camel-flatpack:
groupId: org.apache.camel
artifactId: camel-flatpack
- version: 2.22.1
+ version: 2.22.2
schemes:
- flatpack
languages: []
@@ -538,7 +538,7 @@ artifacts:
camel-flink:
groupId: org.apache.camel
artifactId: camel-flink
- version: 2.22.1
+ version: 2.22.2
schemes:
- flink
languages: []
@@ -546,7 +546,7 @@ artifacts:
camel-fop:
groupId: org.apache.camel
artifactId: camel-fop
- version: 2.22.1
+ version: 2.22.2
schemes:
- fop
languages: []
@@ -554,7 +554,7 @@ artifacts:
camel-freemarker:
groupId: org.apache.camel
artifactId: camel-freemarker
- version: 2.22.1
+ version: 2.22.2
schemes:
- freemarker
languages: []
@@ -562,7 +562,7 @@ artifacts:
camel-ftp:
groupId: org.apache.camel
artifactId: camel-ftp
- version: 2.22.1
+ version: 2.22.2
schemes:
- ftp
- ftps
@@ -572,7 +572,7 @@ artifacts:
camel-ganglia:
groupId: org.apache.camel
artifactId: camel-ganglia
- version: 2.22.1
+ version: 2.22.2
schemes:
- ganglia
languages: []
@@ -580,7 +580,7 @@ artifacts:
camel-geocoder:
groupId: org.apache.camel
artifactId: camel-geocoder
- version: 2.22.1
+ version: 2.22.2
schemes:
- geocoder
languages: []
@@ -588,7 +588,7 @@ artifacts:
camel-git:
groupId: org.apache.camel
artifactId: camel-git
- version: 2.22.1
+ version: 2.22.2
schemes:
- git
languages: []
@@ -596,7 +596,7 @@ artifacts:
camel-github:
groupId: org.apache.camel
artifactId: camel-github
- version: 2.22.1
+ version: 2.22.2
schemes:
- github
languages: []
@@ -604,7 +604,7 @@ artifacts:
camel-google-bigquery:
groupId: org.apache.camel
artifactId: camel-google-bigquery
- version: 2.22.1
+ version: 2.22.2
schemes:
- google-bigquery
languages: []
@@ -612,7 +612,7 @@ artifacts:
camel-google-calendar:
groupId: org.apache.camel
artifactId: camel-google-calendar
- version: 2.22.1
+ version: 2.22.2
schemes:
- google-calendar
languages: []
@@ -620,7 +620,7 @@ artifacts:
camel-google-drive:
groupId: org.apache.camel
artifactId: camel-google-drive
- version: 2.22.1
+ version: 2.22.2
schemes:
- google-drive
languages: []
@@ -628,7 +628,7 @@ artifacts:
camel-google-mail:
groupId: org.apache.camel
artifactId: camel-google-mail
- version: 2.22.1
+ version: 2.22.2
schemes:
- google-mail
- google-mail-stream
@@ -637,7 +637,7 @@ artifacts:
camel-google-pubsub:
groupId: org.apache.camel
artifactId: camel-google-pubsub
- version: 2.22.1
+ version: 2.22.2
schemes:
- google-pubsub
languages: []
@@ -645,7 +645,7 @@ artifacts:
camel-gora:
groupId: org.apache.camel
artifactId: camel-gora
- version: 2.22.1
+ version: 2.22.2
schemes:
- gora
languages: []
@@ -653,7 +653,7 @@ artifacts:
camel-grape:
groupId: org.apache.camel
artifactId: camel-grape
- version: 2.22.1
+ version: 2.22.2
schemes:
- grape
languages: []
@@ -661,7 +661,7 @@ artifacts:
camel-grpc:
groupId: org.apache.camel
artifactId: camel-grpc
- version: 2.22.1
+ version: 2.22.2
schemes:
- grpc
languages: []
@@ -669,7 +669,7 @@ artifacts:
camel-guava-eventbus:
groupId: org.apache.camel
artifactId: camel-guava-eventbus
- version: 2.22.1
+ version: 2.22.2
schemes:
- guava-eventbus
languages: []
@@ -677,7 +677,7 @@ artifacts:
camel-hazelcast:
groupId: org.apache.camel
artifactId: camel-hazelcast
- version: 2.22.1
+ version: 2.22.2
schemes:
- hazelcast-atomicvalue
- hazelcast-instance
@@ -695,7 +695,7 @@ artifacts:
camel-hbase:
groupId: org.apache.camel
artifactId: camel-hbase
- version: 2.22.1
+ version: 2.22.2
schemes:
- hbase
languages: []
@@ -703,7 +703,7 @@ artifacts:
camel-hdfs:
groupId: org.apache.camel
artifactId: camel-hdfs
- version: 2.22.1
+ version: 2.22.2
schemes:
- hdfs
languages: []
@@ -711,7 +711,7 @@ artifacts:
camel-hdfs2:
groupId: org.apache.camel
artifactId: camel-hdfs2
- version: 2.22.1
+ version: 2.22.2
schemes:
- hdfs2
languages: []
@@ -719,7 +719,7 @@ artifacts:
camel-hipchat:
groupId: org.apache.camel
artifactId: camel-hipchat
- version: 2.22.1
+ version: 2.22.2
schemes:
- hipchat
languages: []
@@ -727,7 +727,7 @@ artifacts:
camel-http:
groupId: org.apache.camel
artifactId: camel-http
- version: 2.22.1
+ version: 2.22.2
schemes:
- http
- https
@@ -736,7 +736,7 @@ artifacts:
camel-http4:
groupId: org.apache.camel
artifactId: camel-http4
- version: 2.22.1
+ version: 2.22.2
schemes:
- http4
- https4
@@ -745,7 +745,7 @@ artifacts:
camel-ibatis:
groupId: org.apache.camel
artifactId: camel-ibatis
- version: 2.22.1
+ version: 2.22.2
schemes:
- ibatis
languages: []
@@ -753,7 +753,7 @@ artifacts:
camel-iec60870:
groupId: org.apache.camel
artifactId: camel-iec60870
- version: 2.22.1
+ version: 2.22.2
schemes:
- iec60870-client
- iec60870-server
@@ -762,7 +762,7 @@ artifacts:
camel-ignite:
groupId: org.apache.camel
artifactId: camel-ignite
- version: 2.22.1
+ version: 2.22.2
schemes:
- ignite-cache
- ignite-compute
@@ -776,7 +776,7 @@ artifacts:
camel-mail:
groupId: org.apache.camel
artifactId: camel-mail
- version: 2.22.1
+ version: 2.22.2
schemes:
- imap
- imaps
@@ -790,7 +790,7 @@ artifacts:
camel-infinispan:
groupId: org.apache.camel
artifactId: camel-infinispan
- version: 2.22.1
+ version: 2.22.2
schemes:
- infinispan
languages: []
@@ -798,7 +798,7 @@ artifacts:
camel-influxdb:
groupId: org.apache.camel
artifactId: camel-influxdb
- version: 2.22.1
+ version: 2.22.2
schemes:
- influxdb
languages: []
@@ -806,7 +806,7 @@ artifacts:
camel-irc:
groupId: org.apache.camel
artifactId: camel-irc
- version: 2.22.1
+ version: 2.22.2
schemes:
- irc
languages: []
@@ -814,7 +814,7 @@ artifacts:
camel-ironmq:
groupId: org.apache.camel
artifactId: camel-ironmq
- version: 2.22.1
+ version: 2.22.2
schemes:
- ironmq
languages: []
@@ -822,7 +822,7 @@ artifacts:
camel-javaspace:
groupId: org.apache.camel
artifactId: camel-javaspace
- version: 2.22.1
+ version: 2.22.2
schemes:
- javaspace
languages: []
@@ -830,7 +830,7 @@ artifacts:
camel-jbpm:
groupId: org.apache.camel
artifactId: camel-jbpm
- version: 2.22.1
+ version: 2.22.2
schemes:
- jbpm
languages: []
@@ -838,7 +838,7 @@ artifacts:
camel-jcache:
groupId: org.apache.camel
artifactId: camel-jcache
- version: 2.22.1
+ version: 2.22.2
schemes:
- jcache
languages: []
@@ -846,7 +846,7 @@ artifacts:
camel-jclouds:
groupId: org.apache.camel
artifactId: camel-jclouds
- version: 2.22.1
+ version: 2.22.2
schemes:
- jclouds
languages: []
@@ -854,7 +854,7 @@ artifacts:
camel-jcr:
groupId: org.apache.camel
artifactId: camel-jcr
- version: 2.22.1
+ version: 2.22.2
schemes:
- jcr
languages: []
@@ -862,7 +862,7 @@ artifacts:
camel-jdbc:
groupId: org.apache.camel
artifactId: camel-jdbc
- version: 2.22.1
+ version: 2.22.2
schemes:
- jdbc
languages: []
@@ -870,7 +870,7 @@ artifacts:
camel-jetty9:
groupId: org.apache.camel
artifactId: camel-jetty9
- version: 2.22.1
+ version: 2.22.2
schemes:
- jetty
languages: []
@@ -878,7 +878,7 @@ artifacts:
camel-jgroups:
groupId: org.apache.camel
artifactId: camel-jgroups
- version: 2.22.1
+ version: 2.22.2
schemes:
- jgroups
languages: []
@@ -886,7 +886,7 @@ artifacts:
camel-jing:
groupId: org.apache.camel
artifactId: camel-jing
- version: 2.22.1
+ version: 2.22.2
schemes:
- jing
languages: []
@@ -894,7 +894,7 @@ artifacts:
camel-jira:
groupId: org.apache.camel
artifactId: camel-jira
- version: 2.22.1
+ version: 2.22.2
schemes:
- jira
languages: []
@@ -902,7 +902,7 @@ artifacts:
camel-jms:
groupId: org.apache.camel
artifactId: camel-jms
- version: 2.22.1
+ version: 2.22.2
schemes:
- jms
languages: []
@@ -910,7 +910,7 @@ artifacts:
camel-jmx:
groupId: org.apache.camel
artifactId: camel-jmx
- version: 2.22.1
+ version: 2.22.2
schemes:
- jmx
languages: []
@@ -918,7 +918,7 @@ artifacts:
camel-jolt:
groupId: org.apache.camel
artifactId: camel-jolt
- version: 2.22.1
+ version: 2.22.2
schemes:
- jolt
languages: []
@@ -926,7 +926,7 @@ artifacts:
camel-jpa:
groupId: org.apache.camel
artifactId: camel-jpa
- version: 2.22.1
+ version: 2.22.2
schemes:
- jpa
languages: []
@@ -934,7 +934,7 @@ artifacts:
camel-json-validator:
groupId: org.apache.camel
artifactId: camel-json-validator
- version: 2.22.1
+ version: 2.22.2
schemes:
- json-validator
languages: []
@@ -942,7 +942,7 @@ artifacts:
camel-jt400:
groupId: org.apache.camel
artifactId: camel-jt400
- version: 2.22.1
+ version: 2.22.2
schemes:
- jt400
languages: []
@@ -950,7 +950,7 @@ artifacts:
camel-kafka:
groupId: org.apache.camel
artifactId: camel-kafka
- version: 2.22.1
+ version: 2.22.2
schemes:
- kafka
languages: []
@@ -958,7 +958,7 @@ artifacts:
camel-kestrel:
groupId: org.apache.camel
artifactId: camel-kestrel
- version: 2.22.1
+ version: 2.22.2
schemes:
- kestrel
languages: []
@@ -966,7 +966,7 @@ artifacts:
camel-krati:
groupId: org.apache.camel
artifactId: camel-krati
- version: 2.22.1
+ version: 2.22.2
schemes:
- krati
languages: []
@@ -974,7 +974,7 @@ artifacts:
camel-kubernetes:
groupId: org.apache.camel
artifactId: camel-kubernetes
- version: 2.22.1
+ version: 2.22.2
schemes:
- kubernetes
- kubernetes-config-maps
@@ -996,7 +996,7 @@ artifacts:
camel-ldap:
groupId: org.apache.camel
artifactId: camel-ldap
- version: 2.22.1
+ version: 2.22.2
schemes:
- ldap
languages: []
@@ -1004,7 +1004,7 @@ artifacts:
camel-ldif:
groupId: org.apache.camel
artifactId: camel-ldif
- version: 2.22.1
+ version: 2.22.2
schemes:
- ldif
languages: []
@@ -1012,7 +1012,7 @@ artifacts:
camel-linkedin:
groupId: org.apache.camel
artifactId: camel-linkedin
- version: 2.22.1
+ version: 2.22.2
schemes:
- linkedin
languages: []
@@ -1020,7 +1020,7 @@ artifacts:
camel-printer:
groupId: org.apache.camel
artifactId: camel-printer
- version: 2.22.1
+ version: 2.22.2
schemes:
- lpr
languages: []
@@ -1028,7 +1028,7 @@ artifacts:
camel-lucene:
groupId: org.apache.camel
artifactId: camel-lucene
- version: 2.22.1
+ version: 2.22.2
schemes:
- lucene
languages: []
@@ -1036,7 +1036,7 @@ artifacts:
camel-lumberjack:
groupId: org.apache.camel
artifactId: camel-lumberjack
- version: 2.22.1
+ version: 2.22.2
schemes:
- lumberjack
languages: []
@@ -1044,7 +1044,7 @@ artifacts:
camel-master:
groupId: org.apache.camel
artifactId: camel-master
- version: 2.22.1
+ version: 2.22.2
schemes:
- master
languages: []
@@ -1052,7 +1052,7 @@ artifacts:
camel-metrics:
groupId: org.apache.camel
artifactId: camel-metrics
- version: 2.22.1
+ version: 2.22.2
schemes:
- metrics
languages: []
@@ -1060,7 +1060,7 @@ artifacts:
camel-micrometer:
groupId: org.apache.camel
artifactId: camel-micrometer
- version: 2.22.1
+ version: 2.22.2
schemes:
- micrometer
languages: []
@@ -1068,7 +1068,7 @@ artifacts:
camel-milo:
groupId: org.apache.camel
artifactId: camel-milo
- version: 2.22.1
+ version: 2.22.2
schemes:
- milo-client
- milo-server
@@ -1077,7 +1077,7 @@ artifacts:
camel-mina:
groupId: org.apache.camel
artifactId: camel-mina
- version: 2.22.1
+ version: 2.22.2
schemes:
- mina
languages: []
@@ -1085,7 +1085,7 @@ artifacts:
camel-mina2:
groupId: org.apache.camel
artifactId: camel-mina2
- version: 2.22.1
+ version: 2.22.2
schemes:
- mina2
languages: []
@@ -1093,7 +1093,7 @@ artifacts:
camel-mllp:
groupId: org.apache.camel
artifactId: camel-mllp
- version: 2.22.1
+ version: 2.22.2
schemes:
- mllp
languages: []
@@ -1101,7 +1101,7 @@ artifacts:
camel-mongodb:
groupId: org.apache.camel
artifactId: camel-mongodb
- version: 2.22.1
+ version: 2.22.2
schemes:
- mongodb
languages: []
@@ -1109,7 +1109,7 @@ artifacts:
camel-mongodb-gridfs:
groupId: org.apache.camel
artifactId: camel-mongodb-gridfs
- version: 2.22.1
+ version: 2.22.2
schemes:
- mongodb-gridfs
languages: []
@@ -1117,7 +1117,7 @@ artifacts:
camel-mongodb3:
groupId: org.apache.camel
artifactId: camel-mongodb3
- version: 2.22.1
+ version: 2.22.2
schemes:
- mongodb3
languages: []
@@ -1125,7 +1125,7 @@ artifacts:
camel-mqtt:
groupId: org.apache.camel
artifactId: camel-mqtt
- version: 2.22.1
+ version: 2.22.2
schemes:
- mqtt
languages: []
@@ -1133,7 +1133,7 @@ artifacts:
camel-msv:
groupId: org.apache.camel
artifactId: camel-msv
- version: 2.22.1
+ version: 2.22.2
schemes:
- msv
languages: []
@@ -1141,7 +1141,7 @@ artifacts:
camel-mustache:
groupId: org.apache.camel
artifactId: camel-mustache
- version: 2.22.1
+ version: 2.22.2
schemes:
- mustache
languages: []
@@ -1149,7 +1149,7 @@ artifacts:
camel-mvel:
groupId: org.apache.camel
artifactId: camel-mvel
- version: 2.22.1
+ version: 2.22.2
schemes:
- mvel
languages:
@@ -1158,7 +1158,7 @@ artifacts:
camel-mybatis:
groupId: org.apache.camel
artifactId: camel-mybatis
- version: 2.22.1
+ version: 2.22.2
schemes:
- mybatis
- mybatis-bean
@@ -1167,7 +1167,7 @@ artifacts:
camel-nagios:
groupId: org.apache.camel
artifactId: camel-nagios
- version: 2.22.1
+ version: 2.22.2
schemes:
- nagios
languages: []
@@ -1175,7 +1175,7 @@ artifacts:
camel-nats:
groupId: org.apache.camel
artifactId: camel-nats
- version: 2.22.1
+ version: 2.22.2
schemes:
- nats
languages: []
@@ -1183,7 +1183,7 @@ artifacts:
camel-netty:
groupId: org.apache.camel
artifactId: camel-netty
- version: 2.22.1
+ version: 2.22.2
schemes:
- netty
languages: []
@@ -1191,7 +1191,7 @@ artifacts:
camel-netty-http:
groupId: org.apache.camel
artifactId: camel-netty-http
- version: 2.22.1
+ version: 2.22.2
schemes:
- netty-http
languages: []
@@ -1199,7 +1199,7 @@ artifacts:
camel-netty4:
groupId: org.apache.camel
artifactId: camel-netty4
- version: 2.22.1
+ version: 2.22.2
schemes:
- netty4
languages: []
@@ -1207,7 +1207,7 @@ artifacts:
camel-netty4-http:
groupId: org.apache.camel
artifactId: camel-netty4-http
- version: 2.22.1
+ version: 2.22.2
schemes:
- netty4-http
languages: []
@@ -1215,7 +1215,7 @@ artifacts:
camel-olingo2:
groupId: org.apache.camel
artifactId: camel-olingo2
- version: 2.22.1
+ version: 2.22.2
schemes:
- olingo2
languages: []
@@ -1223,7 +1223,7 @@ artifacts:
camel-olingo4:
groupId: org.apache.camel
artifactId: camel-olingo4
- version: 2.22.1
+ version: 2.22.2
schemes:
- olingo4
languages: []
@@ -1231,7 +1231,7 @@ artifacts:
camel-openshift:
groupId: org.apache.camel
artifactId: camel-openshift
- version: 2.22.1
+ version: 2.22.2
schemes:
- openshift
languages: []
@@ -1239,7 +1239,7 @@ artifacts:
camel-openstack:
groupId: org.apache.camel
artifactId: camel-openstack
- version: 2.22.1
+ version: 2.22.2
schemes:
- openstack-cinder
- openstack-glance
@@ -1252,7 +1252,7 @@ artifacts:
camel-optaplanner:
groupId: org.apache.camel
artifactId: camel-optaplanner
- version: 2.22.1
+ version: 2.22.2
schemes:
- optaplanner
languages: []
@@ -1260,7 +1260,7 @@ artifacts:
camel-paho:
groupId: org.apache.camel
artifactId: camel-paho
- version: 2.22.1
+ version: 2.22.2
schemes:
- paho
languages: []
@@ -1268,7 +1268,7 @@ artifacts:
camel-paxlogging:
groupId: org.apache.camel
artifactId: camel-paxlogging
- version: 2.22.1
+ version: 2.22.2
schemes:
- paxlogging
languages: []
@@ -1276,7 +1276,7 @@ artifacts:
camel-pdf:
groupId: org.apache.camel
artifactId: camel-pdf
- version: 2.22.1
+ version: 2.22.2
schemes:
- pdf
languages: []
@@ -1284,7 +1284,7 @@ artifacts:
camel-pgevent:
groupId: org.apache.camel
artifactId: camel-pgevent
- version: 2.22.1
+ version: 2.22.2
schemes:
- pgevent
languages: []
@@ -1292,7 +1292,7 @@ artifacts:
camel-pubnub:
groupId: org.apache.camel
artifactId: camel-pubnub
- version: 2.22.1
+ version: 2.22.2
schemes:
- pubnub
languages: []
@@ -1300,7 +1300,7 @@ artifacts:
camel-quartz:
groupId: org.apache.camel
artifactId: camel-quartz
- version: 2.22.1
+ version: 2.22.2
schemes:
- quartz
languages: []
@@ -1308,7 +1308,7 @@ artifacts:
camel-quartz2:
groupId: org.apache.camel
artifactId: camel-quartz2
- version: 2.22.1
+ version: 2.22.2
schemes:
- quartz2
languages: []
@@ -1316,7 +1316,7 @@ artifacts:
camel-quickfix:
groupId: org.apache.camel
artifactId: camel-quickfix
- version: 2.22.1
+ version: 2.22.2
schemes:
- quickfix
languages: []
@@ -1324,7 +1324,7 @@ artifacts:
camel-rabbitmq:
groupId: org.apache.camel
artifactId: camel-rabbitmq
- version: 2.22.1
+ version: 2.22.2
schemes:
- rabbitmq
languages: []
@@ -1332,7 +1332,7 @@ artifacts:
camel-reactive-streams:
groupId: org.apache.camel
artifactId: camel-reactive-streams
- version: 2.22.1
+ version: 2.22.2
schemes:
- reactive-streams
languages: []
@@ -1340,7 +1340,7 @@ artifacts:
camel-rest-swagger:
groupId: org.apache.camel
artifactId: camel-rest-swagger
- version: 2.22.1
+ version: 2.22.2
schemes:
- rest-swagger
languages: []
@@ -1348,7 +1348,7 @@ artifacts:
camel-restlet:
groupId: org.apache.camel
artifactId: camel-restlet
- version: 2.22.1
+ version: 2.22.2
schemes:
- restlet
languages: []
@@ -1356,7 +1356,7 @@ artifacts:
camel-rmi:
groupId: org.apache.camel
artifactId: camel-rmi
- version: 2.22.1
+ version: 2.22.2
schemes:
- rmi
languages: []
@@ -1364,7 +1364,7 @@ artifacts:
camel-routebox:
groupId: org.apache.camel
artifactId: camel-routebox
- version: 2.22.1
+ version: 2.22.2
schemes:
- routebox
languages: []
@@ -1372,7 +1372,7 @@ artifacts:
camel-rss:
groupId: org.apache.camel
artifactId: camel-rss
- version: 2.22.1
+ version: 2.22.2
schemes:
- rss
languages: []
@@ -1381,7 +1381,7 @@ artifacts:
camel-salesforce:
groupId: org.apache.camel
artifactId: camel-salesforce
- version: 2.22.1
+ version: 2.22.2
schemes:
- salesforce
languages: []
@@ -1389,7 +1389,7 @@ artifacts:
camel-sap-netweaver:
groupId: org.apache.camel
artifactId: camel-sap-netweaver
- version: 2.22.1
+ version: 2.22.2
schemes:
- sap-netweaver
languages: []
@@ -1397,7 +1397,7 @@ artifacts:
camel-schematron:
groupId: org.apache.camel
artifactId: camel-schematron
- version: 2.22.1
+ version: 2.22.2
schemes:
- schematron
languages: []
@@ -1405,7 +1405,7 @@ artifacts:
camel-jsch:
groupId: org.apache.camel
artifactId: camel-jsch
- version: 2.22.1
+ version: 2.22.2
schemes:
- scp
languages: []
@@ -1413,7 +1413,7 @@ artifacts:
camel-service:
groupId: org.apache.camel
artifactId: camel-service
- version: 2.22.1
+ version: 2.22.2
schemes:
- service
languages: []
@@ -1421,7 +1421,7 @@ artifacts:
camel-servicenow:
groupId: org.apache.camel
artifactId: camel-servicenow
- version: 2.22.1
+ version: 2.22.2
schemes:
- servicenow
languages: []
@@ -1429,7 +1429,7 @@ artifacts:
camel-servlet:
groupId: org.apache.camel
artifactId: camel-servlet
- version: 2.22.1
+ version: 2.22.2
schemes:
- servlet
languages: []
@@ -1437,7 +1437,7 @@ artifacts:
camel-sip:
groupId: org.apache.camel
artifactId: camel-sip
- version: 2.22.1
+ version: 2.22.2
schemes:
- sip
- sips
@@ -1446,7 +1446,7 @@ artifacts:
camel-sjms:
groupId: org.apache.camel
artifactId: camel-sjms
- version: 2.22.1
+ version: 2.22.2
schemes:
- sjms
- sjms-batch
@@ -1455,7 +1455,7 @@ artifacts:
camel-sjms2:
groupId: org.apache.camel
artifactId: camel-sjms2
- version: 2.22.1
+ version: 2.22.2
schemes:
- sjms2
languages: []
@@ -1463,7 +1463,7 @@ artifacts:
camel-slack:
groupId: org.apache.camel
artifactId: camel-slack
- version: 2.22.1
+ version: 2.22.2
schemes:
- slack
languages: []
@@ -1471,7 +1471,7 @@ artifacts:
camel-smpp:
groupId: org.apache.camel
artifactId: camel-smpp
- version: 2.22.1
+ version: 2.22.2
schemes:
- smpp
- smpps
@@ -1480,7 +1480,7 @@ artifacts:
camel-snmp:
groupId: org.apache.camel
artifactId: camel-snmp
- version: 2.22.1
+ version: 2.22.2
schemes:
- snmp
languages: []
@@ -1488,7 +1488,7 @@ artifacts:
camel-solr:
groupId: org.apache.camel
artifactId: camel-solr
- version: 2.22.1
+ version: 2.22.2
schemes:
- solr
- solrs
@@ -1498,7 +1498,7 @@ artifacts:
camel-spark:
groupId: org.apache.camel
artifactId: camel-spark
- version: 2.22.1
+ version: 2.22.2
schemes:
- spark
languages: []
@@ -1506,7 +1506,7 @@ artifacts:
camel-spark-rest:
groupId: org.apache.camel
artifactId: camel-spark-rest
- version: 2.22.1
+ version: 2.22.2
schemes:
- spark-rest
languages: []
@@ -1514,7 +1514,7 @@ artifacts:
camel-splunk:
groupId: org.apache.camel
artifactId: camel-splunk
- version: 2.22.1
+ version: 2.22.2
schemes:
- splunk
languages: []
@@ -1522,7 +1522,7 @@ artifacts:
camel-spring-batch:
groupId: org.apache.camel
artifactId: camel-spring-batch
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-batch
languages: []
@@ -1530,7 +1530,7 @@ artifacts:
camel-spring:
groupId: org.apache.camel
artifactId: camel-spring
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-event
languages:
@@ -1539,7 +1539,7 @@ artifacts:
camel-spring-integration:
groupId: org.apache.camel
artifactId: camel-spring-integration
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-integration
languages: []
@@ -1547,7 +1547,7 @@ artifacts:
camel-spring-ldap:
groupId: org.apache.camel
artifactId: camel-spring-ldap
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-ldap
languages: []
@@ -1555,7 +1555,7 @@ artifacts:
camel-spring-redis:
groupId: org.apache.camel
artifactId: camel-spring-redis
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-redis
languages: []
@@ -1563,7 +1563,7 @@ artifacts:
camel-spring-ws:
groupId: org.apache.camel
artifactId: camel-spring-ws
- version: 2.22.1
+ version: 2.22.2
schemes:
- spring-ws
languages: []
@@ -1571,7 +1571,7 @@ artifacts:
camel-sql:
groupId: org.apache.camel
artifactId: camel-sql
- version: 2.22.1
+ version: 2.22.2
schemes:
- sql
- sql-stored
@@ -1580,7 +1580,7 @@ artifacts:
camel-ssh:
groupId: org.apache.camel
artifactId: camel-ssh
- version: 2.22.1
+ version: 2.22.2
schemes:
- ssh
languages: []
@@ -1588,7 +1588,7 @@ artifacts:
camel-stax:
groupId: org.apache.camel
artifactId: camel-stax
- version: 2.22.1
+ version: 2.22.2
schemes:
- stax
languages: []
@@ -1596,7 +1596,7 @@ artifacts:
camel-stomp:
groupId: org.apache.camel
artifactId: camel-stomp
- version: 2.22.1
+ version: 2.22.2
schemes:
- stomp
languages: []
@@ -1604,7 +1604,7 @@ artifacts:
camel-stream:
groupId: org.apache.camel
artifactId: camel-stream
- version: 2.22.1
+ version: 2.22.2
schemes:
- stream
languages: []
@@ -1612,7 +1612,7 @@ artifacts:
camel-stringtemplate:
groupId: org.apache.camel
artifactId: camel-stringtemplate
- version: 2.22.1
+ version: 2.22.2
schemes:
- string-template
languages: []
@@ -1620,7 +1620,7 @@ artifacts:
camel-telegram:
groupId: org.apache.camel
artifactId: camel-telegram
- version: 2.22.1
+ version: 2.22.2
schemes:
- telegram
languages: []
@@ -1628,7 +1628,7 @@ artifacts:
camel-thrift:
groupId: org.apache.camel
artifactId: camel-thrift
- version: 2.22.1
+ version: 2.22.2
schemes:
- thrift
languages: []
@@ -1637,7 +1637,7 @@ artifacts:
camel-tika:
groupId: org.apache.camel
artifactId: camel-tika
- version: 2.22.1
+ version: 2.22.2
schemes:
- tika
languages: []
@@ -1645,7 +1645,7 @@ artifacts:
camel-twilio:
groupId: org.apache.camel
artifactId: camel-twilio
- version: 2.22.1
+ version: 2.22.2
schemes:
- twilio
languages: []
@@ -1653,7 +1653,7 @@ artifacts:
camel-twitter:
groupId: org.apache.camel
artifactId: camel-twitter
- version: 2.22.1
+ version: 2.22.2
schemes:
- twitter
- twitter-directmessage
@@ -1665,7 +1665,7 @@ artifacts:
camel-undertow:
groupId: org.apache.camel
artifactId: camel-undertow
- version: 2.22.1
+ version: 2.22.2
schemes:
- undertow
languages: []
@@ -1673,7 +1673,7 @@ artifacts:
camel-velocity:
groupId: org.apache.camel
artifactId: camel-velocity
- version: 2.22.1
+ version: 2.22.2
schemes:
- velocity
languages: []
@@ -1681,7 +1681,7 @@ artifacts:
camel-vertx:
groupId: org.apache.camel
artifactId: camel-vertx
- version: 2.22.1
+ version: 2.22.2
schemes:
- vertx
languages: []
@@ -1689,7 +1689,7 @@ artifacts:
camel-weather:
groupId: org.apache.camel
artifactId: camel-weather
- version: 2.22.1
+ version: 2.22.2
schemes:
- weather
languages: []
@@ -1697,7 +1697,7 @@ artifacts:
camel-web3j:
groupId: org.apache.camel
artifactId: camel-web3j
- version: 2.22.1
+ version: 2.22.2
schemes:
- web3j
languages: []
@@ -1705,7 +1705,7 @@ artifacts:
camel-websocket:
groupId: org.apache.camel
artifactId: camel-websocket
- version: 2.22.1
+ version: 2.22.2
schemes:
- websocket
languages: []
@@ -1713,7 +1713,7 @@ artifacts:
camel-wordpress:
groupId: org.apache.camel
artifactId: camel-wordpress
- version: 2.22.1
+ version: 2.22.2
schemes:
- wordpress
languages: []
@@ -1721,7 +1721,7 @@ artifacts:
camel-xchange:
groupId: org.apache.camel
artifactId: camel-xchange
- version: 2.22.1
+ version: 2.22.2
schemes:
- xchange
languages: []
@@ -1729,7 +1729,7 @@ artifacts:
camel-xmlrpc:
groupId: org.apache.camel
artifactId: camel-xmlrpc
- version: 2.22.1
+ version: 2.22.2
schemes:
- xmlrpc
languages: []
@@ -1738,7 +1738,7 @@ artifacts:
camel-xmlsecurity:
groupId: org.apache.camel
artifactId: camel-xmlsecurity
- version: 2.22.1
+ version: 2.22.2
schemes:
- xmlsecurity
languages: []
@@ -1747,7 +1747,7 @@ artifacts:
camel-xmpp:
groupId: org.apache.camel
artifactId: camel-xmpp
- version: 2.22.1
+ version: 2.22.2
schemes:
- xmpp
languages: []
@@ -1755,7 +1755,7 @@ artifacts:
camel-saxon:
groupId: org.apache.camel
artifactId: camel-saxon
- version: 2.22.1
+ version: 2.22.2
schemes:
- xquery
languages:
@@ -1764,7 +1764,7 @@ artifacts:
camel-yammer:
groupId: org.apache.camel
artifactId: camel-yammer
- version: 2.22.1
+ version: 2.22.2
schemes:
- yammer
languages: []
@@ -1772,7 +1772,7 @@ artifacts:
camel-yql:
groupId: org.apache.camel
artifactId: camel-yql
- version: 2.22.1
+ version: 2.22.2
schemes:
- yql
languages: []
@@ -1780,7 +1780,7 @@ artifacts:
camel-zendesk:
groupId: org.apache.camel
artifactId: camel-zendesk
- version: 2.22.1
+ version: 2.22.2
schemes:
- zendesk
languages: []
@@ -1788,7 +1788,7 @@ artifacts:
camel-zookeeper:
groupId: org.apache.camel
artifactId: camel-zookeeper
- version: 2.22.1
+ version: 2.22.2
schemes:
- zookeeper
languages: []
@@ -1796,7 +1796,7 @@ artifacts:
camel-zookeeper-master:
groupId: org.apache.camel
artifactId: camel-zookeeper-master
- version: 2.22.1
+ version: 2.22.2
schemes:
- zookeeper-master
languages: []
@@ -1804,7 +1804,7 @@ artifacts:
camel-juel:
groupId: org.apache.camel
artifactId: camel-juel
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- el
@@ -1812,7 +1812,7 @@ artifacts:
camel-groovy:
groupId: org.apache.camel
artifactId: camel-groovy
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- groovy
@@ -1820,7 +1820,7 @@ artifacts:
camel-script:
groupId: org.apache.camel
artifactId: camel-script
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- javaScript
@@ -1831,7 +1831,7 @@ artifacts:
camel-jsonpath:
groupId: org.apache.camel
artifactId: camel-jsonpath
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- jsonpath
@@ -1839,7 +1839,7 @@ artifacts:
camel-jxpath:
groupId: org.apache.camel
artifactId: camel-jxpath
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- jxpath
@@ -1847,7 +1847,7 @@ artifacts:
camel-ognl:
groupId: org.apache.camel
artifactId: camel-ognl
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- ognl
@@ -1855,7 +1855,7 @@ artifacts:
camel-josql:
groupId: org.apache.camel
artifactId: camel-josql
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- sql
@@ -1863,7 +1863,7 @@ artifacts:
camel-hl7:
groupId: org.apache.camel
artifactId: camel-hl7
- version: 2.22.1
+ version: 2.22.2
components: []
languages:
- terser
@@ -1872,7 +1872,7 @@ artifacts:
camel-asn1:
groupId: org.apache.camel
artifactId: camel-asn1
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1880,7 +1880,7 @@ artifacts:
camel-barcode:
groupId: org.apache.camel
artifactId: camel-barcode
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1888,7 +1888,7 @@ artifacts:
camel-base64:
groupId: org.apache.camel
artifactId: camel-base64
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1896,7 +1896,7 @@ artifacts:
camel-beanio:
groupId: org.apache.camel
artifactId: camel-beanio
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1904,7 +1904,7 @@ artifacts:
camel-bindy:
groupId: org.apache.camel
artifactId: camel-bindy
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1914,7 +1914,7 @@ artifacts:
camel-boon:
groupId: org.apache.camel
artifactId: camel-boon
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1922,7 +1922,7 @@ artifacts:
camel-castor:
groupId: org.apache.camel
artifactId: camel-castor
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1930,7 +1930,7 @@ artifacts:
camel-csv:
groupId: org.apache.camel
artifactId: camel-csv
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1938,7 +1938,7 @@ artifacts:
camel-fhir:
groupId: org.apache.camel
artifactId: camel-fhir
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1947,7 +1947,7 @@ artifacts:
camel-hessian:
groupId: org.apache.camel
artifactId: camel-hessian
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1955,7 +1955,7 @@ artifacts:
camel-ical:
groupId: org.apache.camel
artifactId: camel-ical
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1963,7 +1963,7 @@ artifacts:
camel-jacksonxml:
groupId: org.apache.camel
artifactId: camel-jacksonxml
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1971,7 +1971,7 @@ artifacts:
camel-jaxb:
groupId: org.apache.camel
artifactId: camel-jaxb
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1979,7 +1979,7 @@ artifacts:
camel-jibx:
groupId: org.apache.camel
artifactId: camel-jibx
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1987,7 +1987,7 @@ artifacts:
camel-fastjson:
groupId: org.apache.camel
artifactId: camel-fastjson
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -1995,7 +1995,7 @@ artifacts:
camel-gson:
groupId: org.apache.camel
artifactId: camel-gson
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2003,7 +2003,7 @@ artifacts:
camel-jackson:
groupId: org.apache.camel
artifactId: camel-jackson
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2011,7 +2011,7 @@ artifacts:
camel-johnzon:
groupId: org.apache.camel
artifactId: camel-johnzon
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2019,7 +2019,7 @@ artifacts:
camel-xstream:
groupId: org.apache.camel
artifactId: camel-xstream
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2028,7 +2028,7 @@ artifacts:
camel-lzf:
groupId: org.apache.camel
artifactId: camel-lzf
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2036,7 +2036,7 @@ artifacts:
camel-protobuf:
groupId: org.apache.camel
artifactId: camel-protobuf
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2044,7 +2044,7 @@ artifacts:
camel-soap:
groupId: org.apache.camel
artifactId: camel-soap
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2052,7 +2052,7 @@ artifacts:
camel-syslog:
groupId: org.apache.camel
artifactId: camel-syslog
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2060,7 +2060,7 @@ artifacts:
camel-tarfile:
groupId: org.apache.camel
artifactId: camel-tarfile
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2068,7 +2068,7 @@ artifacts:
camel-tagsoup:
groupId: org.apache.camel
artifactId: camel-tagsoup
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2076,7 +2076,7 @@ artifacts:
camel-univocity-parsers:
groupId: org.apache.camel
artifactId: camel-univocity-parsers
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2086,7 +2086,7 @@ artifacts:
camel-xmlbeans:
groupId: org.apache.camel
artifactId: camel-xmlbeans
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2094,7 +2094,7 @@ artifacts:
camel-xmljson:
groupId: org.apache.camel
artifactId: camel-xmljson
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2102,7 +2102,7 @@ artifacts:
camel-snakeyaml:
groupId: org.apache.camel
artifactId: camel-snakeyaml
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
@@ -2110,12 +2110,12 @@ artifacts:
camel-zipfile:
groupId: org.apache.camel
artifactId: camel-zipfile
- version: 2.22.1
+ version: 2.22.2
components: []
languages: []
dataformats:
- zipfile
-version: 2.22.1
+version: 2.22.2
`
Resources["crd-integration-context.yaml"] =
diff --git a/pkg/apis/camel/v1alpha1/types.go b/pkg/apis/camel/v1alpha1/types.go
index 11d95f5..f61c555 100644
--- a/pkg/apis/camel/v1alpha1/types.go
+++ b/pkg/apis/camel/v1alpha1/types.go
@@ -270,3 +270,9 @@ const (
// IntegrationPlatformPhaseDuplicate --
IntegrationPlatformPhaseDuplicate IntegrationPlatformPhase = "Duplicate"
)
+
+// Artifact --
+type Artifact struct {
+ ID string `json:"id" yaml:"id"`
+ Location string `json:"location,omitempty" yaml:"location,omitempty"`
+}
diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
index af2406c..202fd25 100644
--- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
@@ -25,6 +25,22 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime"
)
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver,
writing into out. in must be non-nil.
+func (in *Artifact) DeepCopyInto(out *Artifact) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver,
creating a new Artifact.
+func (in *Artifact) DeepCopy() *Artifact {
+ if in == nil {
+ return nil
+ }
+ out := new(Artifact)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver,
writing into out. in must be non-nil.
func (in *ConfigurationSpec) DeepCopyInto(out *ConfigurationSpec) {
*out = *in
diff --git a/pkg/build/assemble/maven_assembler.go
b/pkg/build/assemble/maven_assembler.go
deleted file mode 100644
index c19f576..0000000
--- a/pkg/build/assemble/maven_assembler.go
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 assemble
-
-import (
- "context"
- "encoding/xml"
- "fmt"
- "strings"
- "time"
-
- "github.com/apache/camel-k/pkg/build"
- "github.com/apache/camel-k/pkg/util/maven"
- "github.com/sirupsen/logrus"
-
- "github.com/apache/camel-k/version"
-)
-
-type mavenAssembler struct {
- buffer chan assembleOperation
-}
-
-type assembleOperation struct {
- request build.Request
- output chan build.AssembledOutput
-}
-
-// NewMavenAssembler create a new builder
-func NewMavenAssembler(ctx context.Context) build.Assembler {
- assembler := mavenAssembler{
- buffer: make(chan assembleOperation, 100),
- }
- go assembler.assembleCycle(ctx)
- return &assembler
-}
-
-func (b *mavenAssembler) Assemble(request build.Request) <-chan
build.AssembledOutput {
- res := make(chan build.AssembledOutput, 1)
- op := assembleOperation{
- request: request,
- output: res,
- }
- b.buffer <- op
- return res
-}
-
-func (b *mavenAssembler) assembleCycle(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- b.buffer = nil
- return
- case op := <-b.buffer:
- now := time.Now()
- logrus.Info("Starting new Maven build")
- res := b.execute(&op.request)
- elapsed := time.Now().Sub(now)
-
- if res.Error != nil {
- logrus.Error("Error during Maven build (total
time ", elapsed.Seconds(), " seconds): ", res.Error)
- } else {
- logrus.Info("Maven build completed in ",
elapsed.Seconds(), " seconds")
- }
-
- op.output <- res
- }
- }
-}
-
-func (b *mavenAssembler) execute(request *build.Request) build.AssembledOutput
{
- project, err := generateProject(request)
- if err != nil {
- return build.AssembledOutput{
- Error: err,
- }
- }
-
- res, err := maven.Process(project)
- if err != nil {
- return build.AssembledOutput{
- Error: err,
- }
- }
-
- output := build.AssembledOutput{
- Classpath: make([]build.ClasspathEntry, 0, len(res.Classpath)),
- }
- for _, e := range res.Classpath {
- output.Classpath = append(output.Classpath,
build.ClasspathEntry{
- ID: e.ID,
- Location: e.Location,
- })
- }
-
- return output
-}
-
-func generateProject(source *build.Request) (maven.Project, error) {
- project := maven.Project{
- XMLName: xml.Name{Local: "project"},
- XMLNs: "http://maven.apache.org/POM/4.0.0",
- XMLNsXsi: "http://www.w3.org/2001/XMLSchema-instance",
- XsiSchemaLocation: "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd",
- ModelVersion: "4.0.0",
- GroupID: "org.apache.camel.k.integration",
- ArtifactID: "camel-k-integration",
- Version: version.Version,
- DependencyManagement: maven.DependencyManagement{
- Dependencies: maven.Dependencies{
- Dependencies: []maven.Dependency{
- {
- //TODO: camel version should be
retrieved from an external request or provided as static version
- GroupID: "org.apache.camel",
- ArtifactID: "camel-bom",
- Version: "2.22.1",
- Type: "pom",
- Scope: "import",
- },
- },
- },
- },
- Dependencies: maven.Dependencies{
- Dependencies: make([]maven.Dependency, 0),
- },
- }
-
- //
- // set-up dependencies
- //
-
- deps := &project.Dependencies
- deps.AddGAV("org.apache.camel.k", "camel-k-runtime-jvm",
version.Version)
-
- for _, d := range source.Dependencies {
- if strings.HasPrefix(d, "camel:") {
- artifactID := strings.TrimPrefix(d, "camel:")
-
- if !strings.HasPrefix(artifactID, "camel-") {
- artifactID = "camel-" + artifactID
- }
-
- deps.AddGAV("org.apache.camel", artifactID, "")
- } else if strings.HasPrefix(d, "mvn:") {
- mid := strings.TrimPrefix(d, "mvn:")
- gav := strings.Replace(mid, "/", ":", -1)
-
- deps.AddEncodedGAV(gav)
- } else if strings.HasPrefix(d, "runtime:") {
- artifactID := strings.Replace(d, "runtime:",
"camel-k-runtime-", 1)
-
- deps.AddGAV("org.apache.camel.k", artifactID,
version.Version)
- } else {
- return maven.Project{}, fmt.Errorf("unknown dependency
type: %s", d)
- }
- }
-
- return project, nil
-}
diff --git a/pkg/build/assemble/maven_assembler_test.go
b/pkg/build/assemble/maven_assembler_test.go
deleted file mode 100644
index 20de3d8..0000000
--- a/pkg/build/assemble/maven_assembler_test.go
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 assemble
-
-import (
- "testing"
-
- "github.com/apache/camel-k/pkg/build"
- "github.com/stretchr/testify/assert"
-)
-
-func TestProjectGeneration(t *testing.T) {
- request := build.Request{
- Identifier: build.Identifier{
- Name: "my-integration",
- Qualifier: "",
- },
- Code: build.Source{
- Name: "my-code.js",
- Content: `from("timer:start").to("log:end")`,
- Language: "",
- },
- Dependencies: []string{
- "camel:mail",
- "camel:camel-netty4",
- "mvn:org.apache.camel/camel-servicenow/2.21.1",
- "mvn:org.apache.camel/camel-salesforce",
- },
- }
-
- prj, err := generateProject(&request)
-
- assert.Nil(t, err)
- assert.NotNil(t, prj)
- assert.Equal(t, len(prj.Dependencies.Dependencies), 5)
- assert.Equal(t, prj.Dependencies.Dependencies[0].ArtifactID,
"camel-k-runtime-jvm")
- assert.Equal(t, prj.Dependencies.Dependencies[1].ArtifactID,
"camel-mail")
- assert.Equal(t, prj.Dependencies.Dependencies[2].ArtifactID,
"camel-netty4")
- assert.Equal(t, prj.Dependencies.Dependencies[3].ArtifactID,
"camel-servicenow")
- assert.Equal(t, prj.Dependencies.Dependencies[3].Version, "2.21.1")
- assert.Equal(t, prj.Dependencies.Dependencies[4].ArtifactID,
"camel-salesforce")
- assert.Equal(t, prj.Dependencies.Dependencies[4].Version, "")
-}
-
-func TestProjectGenerationWithFailure(t *testing.T) {
- request := build.Request{
- Identifier: build.Identifier{
- Name: "my-integration",
- Qualifier: "",
- },
- Code: build.Source{
- Name: "my-code.js",
- Content: `from("timer:start").to("log:end")`,
- Language: "",
- },
- Dependencies: []string{
- "other:mail",
- "camel:camel-netty4",
- "mvn:org.apache.camel/camel-servicenow/2.21.1",
- "mvn:org.apache.camel/camel-salesforce",
- },
- }
-
- _, err := generateProject(&request)
-
- assert.NotNil(t, err)
-}
diff --git a/pkg/build/build_manager.go b/pkg/build/build_manager.go
deleted file mode 100644
index 83c0f8a..0000000
--- a/pkg/build/build_manager.go
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 build
-
-import (
- "context"
- "errors"
- "sync"
-)
-
-// Manager represent the main facade to the image build system
-type Manager struct {
- ctx context.Context
- builds sync.Map
- assembler Assembler
- packager Packager
- publisher Publisher
-}
-
-// NewManager creates an instance of the build manager using the given
assembler, packager and publisher
-func NewManager(ctx context.Context, assembler Assembler, packager Packager,
publisher Publisher) *Manager {
- return &Manager{
- ctx: ctx,
- assembler: assembler,
- packager: packager,
- publisher: publisher,
- }
-}
-
-// Get retrieve the build result associated to the given build identifier
-func (m *Manager) Get(identifier Identifier) Result {
- info, present := m.builds.Load(identifier)
- if !present || info == nil {
- return noBuildInfo()
- }
-
- return info.(Result)
-}
-
-// Start starts a new build
-func (m *Manager) Start(request Request) {
- m.builds.Store(request.Identifier, initialBuildInfo(request))
-
- assembleChannel := m.assembler.Assemble(request)
- go func() {
- var assembled AssembledOutput
- select {
- case <-m.ctx.Done():
- m.builds.Store(request.Identifier,
canceledBuildInfo(request))
- return
- case assembled = <-assembleChannel:
- if assembled.Error != nil {
- m.builds.Store(request.Identifier,
failedAssembleBuildInfo(request, assembled))
- return
- }
- }
-
- packageChannel := m.packager.Package(request, assembled)
- var packaged PackagedOutput
- select {
- case <-m.ctx.Done():
- m.builds.Store(request.Identifier,
canceledBuildInfo(request))
- return
- case packaged = <-packageChannel:
- if packaged.Error != nil {
- m.builds.Store(request.Identifier,
failedPackageBuildInfo(request, packaged))
- return
- }
- }
- defer m.packager.Cleanup(packaged)
-
- publishChannel := m.publisher.Publish(request, assembled,
packaged)
- var published PublishedOutput
- select {
- case <-m.ctx.Done():
- m.builds.Store(request.Identifier,
canceledBuildInfo(request))
- return
- case published = <-publishChannel:
- if published.Error != nil {
- m.builds.Store(request.Identifier,
failedPublishBuildInfo(request, published))
- return
- }
- }
-
- m.builds.Store(request.Identifier, completeResult(request,
assembled, published))
- }()
-}
-
-func noBuildInfo() Result {
- return Result{
- Status: StatusNotRequested,
- }
-}
-
-func initialBuildInfo(request Request) Result {
- return Result{
- Request: request,
- Status: StatusStarted,
- }
-}
-
-func canceledBuildInfo(request Request) Result {
- return Result{
- Request: request,
- Error: errors.New("build canceled"),
- Status: StatusError,
- }
-}
-
-func failedAssembleBuildInfo(request Request, output AssembledOutput) Result {
- return Result{
- Request: request,
- Error: output.Error,
- Status: StatusError,
- }
-}
-
-func failedPackageBuildInfo(request Request, output PackagedOutput) Result {
- return Result{
- Request: request,
- Error: output.Error,
- Status: StatusError,
- }
-}
-
-func failedPublishBuildInfo(request Request, output PublishedOutput) Result {
- return Result{
- Request: request,
- Error: output.Error,
- Status: StatusError,
- }
-}
-
-func completeResult(request Request, a AssembledOutput, p PublishedOutput)
Result {
- return Result{
- Request: request,
- Status: StatusCompleted,
- Classpath: a.Classpath,
- Image: p.Image,
- }
-}
diff --git a/pkg/build/build_types.go b/pkg/build/build_types.go
deleted file mode 100644
index bf83245..0000000
--- a/pkg/build/build_types.go
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 build
-
-// Request represent a request to build a specific code
-type Request struct {
- Identifier Identifier
- Code Source
- Dependencies []string
-}
-
-// Identifier identifies a build
-type Identifier struct {
- Name string
- Qualifier string
-}
-
-// Source represent the integration code
-type Source struct {
- Name string
- Content string
- Language string
-}
-
-// Result represents the result of a build
-type Result struct {
- Request Request
- Status Status
- Image string
- Error error
- Classpath []ClasspathEntry
-}
-
-// ClasspathEntry --
-type ClasspathEntry struct {
- ID string `json:"id" yaml:"id"`
- Location string `json:"location,omitempty" yaml:"location,omitempty"`
-}
-
-// AssembledOutput represents the output of the assemble phase
-type AssembledOutput struct {
- Error error
- Classpath []ClasspathEntry
-}
-
-// A Assembler can be used to compute the classpath of a integration context
-type Assembler interface {
- Assemble(Request) <-chan AssembledOutput
-}
-
-// PackagedOutput is the new image layer that needs to be pushed
-type PackagedOutput struct {
- Error error
- BaseImage string
- TarFile string
-}
-
-// A Packager produces the image layer that needs to be pushed
-type Packager interface {
- Package(Request, AssembledOutput) <-chan PackagedOutput
- Cleanup(PackagedOutput)
-}
-
-// PublishedOutput is the output of the publish phase
-type PublishedOutput struct {
- Error error
- Image string
-}
-
-// A Publisher publishes a docker image of a build request
-type Publisher interface {
- Publish(Request, AssembledOutput, PackagedOutput) <-chan PublishedOutput
-}
-
-// Status --
-type Status int
-
-const (
- // StatusNotRequested --
- StatusNotRequested Status = iota
-
- // StatusStarted --
- StatusStarted
-
- // StatusCompleted --
- StatusCompleted
-
- // StatusError --
- StatusError
-)
diff --git a/pkg/build/packager/base.go b/pkg/build/packager/base.go
deleted file mode 100644
index a13da83..0000000
--- a/pkg/build/packager/base.go
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 packager
-
-import (
- "context"
- "io/ioutil"
- "os"
- "path"
- "time"
-
- "github.com/apache/camel-k/pkg/build"
- "github.com/apache/camel-k/pkg/util/maven"
- "github.com/apache/camel-k/pkg/util/tar"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
-)
-
-const (
- sharedDir = "/workspace"
- artifactDirPrefix = "layer-"
-)
-
-type commonPackager struct {
- buffer chan packageOperation
- uploadedArtifactsSelector
-}
-
-type packageOperation struct {
- request build.Request
- assembled build.AssembledOutput
- output chan build.PackagedOutput
-}
-
-type uploadedArtifactsSelector func([]build.ClasspathEntry) (string,
[]build.ClasspathEntry, error)
-
-func newBasePackager(ctx context.Context, rootImage string) build.Packager {
- identitySelector := func(entries []build.ClasspathEntry) (string,
[]build.ClasspathEntry, error) {
- return rootImage, entries, nil
- }
- return newBasePackagerWithSelector(ctx, identitySelector)
-}
-
-func newBasePackagerWithSelector(ctx context.Context,
uploadedArtifactsSelector uploadedArtifactsSelector) *commonPackager {
- pack := commonPackager{
- buffer: make(chan packageOperation, 100),
- uploadedArtifactsSelector: uploadedArtifactsSelector,
- }
- go pack.packageCycle(ctx)
- return &pack
-}
-
-func (b *commonPackager) Package(request build.Request, assembled
build.AssembledOutput) <-chan build.PackagedOutput {
- res := make(chan build.PackagedOutput, 1)
- op := packageOperation{
- request: request,
- assembled: assembled,
- output: res,
- }
- b.buffer <- op
- return res
-}
-
-func (b *commonPackager) Cleanup(output build.PackagedOutput) {
- parentDir, _ := path.Split(output.TarFile)
- err := os.RemoveAll(parentDir)
- if err != nil {
- logrus.Warn("Could not remove temporary directory ", parentDir)
- }
-}
-
-func (b *commonPackager) packageCycle(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- b.buffer = nil
- return
- case op := <-b.buffer:
- now := time.Now()
- logrus.Info("Starting a new image packaging")
- res := b.execute(op.request, op.assembled)
- elapsed := time.Now().Sub(now)
-
- if res.Error != nil {
- logrus.Error("Error during packaging (total
time ", elapsed.Seconds(), " seconds): ", res.Error)
- } else {
- logrus.Info("Packaging completed in ",
elapsed.Seconds(), " seconds")
- }
-
- op.output <- res
- }
- }
-}
-
-func (b *commonPackager) execute(request build.Request, assembled
build.AssembledOutput) build.PackagedOutput {
- baseImageName, selectedArtifacts, err :=
b.uploadedArtifactsSelector(assembled.Classpath)
- if err != nil {
- return build.PackagedOutput{Error: err}
- }
-
- tarFile, err := b.createTar(assembled, selectedArtifacts)
- if err != nil {
- return build.PackagedOutput{Error: err}
- }
-
- return build.PackagedOutput{
- BaseImage: baseImageName,
- TarFile: tarFile,
- }
-}
-
-func (b *commonPackager) createTar(assembled build.AssembledOutput,
selectedArtifacts []build.ClasspathEntry) (string, error) {
- buildBaseDir := sharedDir
- if _, err := os.Stat(buildBaseDir); os.IsNotExist(err) {
- // use default OS temp dir if a shared dir is not present
- buildBaseDir = ""
- }
- artifactDir, err := ioutil.TempDir(buildBaseDir, artifactDirPrefix)
- if err != nil {
- return "", errors.Wrap(err, "could not create temporary dir for
packaged artifacts")
- }
-
- tarFileName := path.Join(artifactDir, "occi.tar")
- tarAppender, err := tar.NewAppender(tarFileName)
- if err != nil {
- return "", err
- }
- defer tarAppender.Close()
-
- tarDir := "dependencies/"
- for _, entry := range selectedArtifacts {
- gav, err := maven.ParseGAV(entry.ID)
- if err != nil {
- return "", nil
- }
-
- tarPath := path.Join(tarDir, gav.GroupID)
- _, err = tarAppender.AddFile(entry.Location, tarPath)
- if err != nil {
- return "", err
- }
- }
-
- cp := ""
- for _, entry := range assembled.Classpath {
- gav, err := maven.ParseGAV(entry.ID)
- if err != nil {
- return "", nil
- }
- tarPath := path.Join(tarDir, gav.GroupID)
- _, fileName := path.Split(entry.Location)
- fileName = path.Join(tarPath, fileName)
- cp += fileName + "\n"
- }
-
- err = tarAppender.AppendData([]byte(cp), "classpath")
- if err != nil {
- return "", err
- }
-
- return tarFileName, nil
-}
diff --git a/pkg/build/packager/factory.go b/pkg/build/packager/factory.go
deleted file mode 100644
index 48ad665..0000000
--- a/pkg/build/packager/factory.go
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 packager
-
-import (
- "context"
- "github.com/apache/camel-k/pkg/build"
-)
-
-const (
- s2iRootImage = "fabric8/s2i-java:2.3"
- //javaRootImage = "fabric8/java-jboss-openjdk8-jdk:1.5.1"
- javaRootImage = "fabric8/java-alpine-openjdk8-jdk:1.5.1"
-)
-
-// NewS2IStandardPackager creates a standard packager for S2I builds
-func NewS2IStandardPackager(ctx context.Context) build.Packager {
- return newBasePackager(ctx, s2iRootImage)
-}
-
-// NewS2IIncrementalPackager creates a incremental packager for S2I builds
-func NewS2IIncrementalPackager(ctx context.Context, lister
PublishedImagesLister) build.Packager {
- return newIncrementalPackager(ctx, lister, s2iRootImage)
-}
-
-// NewJavaStandardPackager creates a standard packager for Java Docker builds
-func NewJavaStandardPackager(ctx context.Context) build.Packager {
- return newBasePackager(ctx, javaRootImage)
-}
-
-// NewJavaIncrementalPackager creates a incremental packager for Java Docker
builds
-func NewJavaIncrementalPackager(ctx context.Context, lister
PublishedImagesLister) build.Packager {
- return newIncrementalPackager(ctx, lister, javaRootImage)
-}
diff --git a/pkg/build/packager/incremental.go
b/pkg/build/packager/incremental.go
deleted file mode 100644
index cb9334b..0000000
--- a/pkg/build/packager/incremental.go
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 packager
-
-import (
- "context"
-
- "github.com/apache/camel-k/pkg/build"
-)
-
-type incrementalPackager struct {
- commonPackager *commonPackager
- lister PublishedImagesLister
- rootImage string
-}
-
-// newIncrementalPackager creates a new packager that is able to create a
layer on top of a existing image
-func newIncrementalPackager(ctx context.Context, lister PublishedImagesLister,
rootImage string) build.Packager {
- layeredPackager := incrementalPackager{
- lister: lister,
- rootImage: rootImage,
- }
- layeredPackager.commonPackager = newBasePackagerWithSelector(ctx,
layeredPackager.selectArtifactsToUpload)
- return &layeredPackager
-}
-
-func (p *incrementalPackager) Package(req build.Request, assembled
build.AssembledOutput) <-chan build.PackagedOutput {
- return p.commonPackager.Package(req, assembled)
-}
-
-func (p *incrementalPackager) Cleanup(output build.PackagedOutput) {
- p.commonPackager.Cleanup(output)
-}
-
-func (p *incrementalPackager) selectArtifactsToUpload(entries
[]build.ClasspathEntry) (string, []build.ClasspathEntry, error) {
- images, err := p.lister.ListPublishedImages()
- if err != nil {
- return "", nil, err
- }
-
- bestImage, commonLibs := p.findBestImage(images, entries)
- if bestImage != nil {
- selectedClasspath := make([]build.ClasspathEntry, 0)
- for _, entry := range entries {
- if _, isCommon := commonLibs[entry.ID]; !isCommon {
- selectedClasspath = append(selectedClasspath,
entry)
- }
- }
-
- return bestImage.Image, selectedClasspath, nil
- }
-
- // return default selection
- return p.rootImage, entries, nil
-}
-
-func (p *incrementalPackager) findBestImage(images []PublishedImage, entries
[]build.ClasspathEntry) (*PublishedImage, map[string]bool) {
- if len(images) == 0 {
- return nil, nil
- }
- requiredLibs := make(map[string]bool, len(entries))
- for _, entry := range entries {
- requiredLibs[entry.ID] = true
- }
-
- var bestImage PublishedImage
- bestImageCommonLibs := make(map[string]bool, 0)
- bestImageSurplusLibs := 0
- for _, image := range images {
- common := make(map[string]bool)
- for _, id := range image.Classpath {
- if _, ok := requiredLibs[id]; ok {
- common[id] = true
- }
- }
- numCommonLibs := len(common)
- surplus := len(image.Classpath) - numCommonLibs
- if surplus >= numCommonLibs/3 {
- // Heuristic approach: if there are too many unrelated
libraries, just use the base image
- continue
- }
-
- if numCommonLibs > len(bestImageCommonLibs) || (numCommonLibs
== len(bestImageCommonLibs) && surplus < bestImageSurplusLibs) {
- bestImage = image
- bestImageCommonLibs = common
- bestImageSurplusLibs = surplus
- }
- }
-
- return &bestImage, bestImageCommonLibs
-}
diff --git a/pkg/build/publish/kaniko_publisher.go
b/pkg/build/publish/kaniko_publisher.go
deleted file mode 100644
index ac356eb..0000000
--- a/pkg/build/publish/kaniko_publisher.go
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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 publish
-
-import (
- tarutils "archive/tar"
- "context"
- "github.com/apache/camel-k/pkg/util/kubernetes"
- "io"
- "io/ioutil"
- "os"
- "path"
- "time"
-
- "github.com/apache/camel-k/pkg/build"
- "github.com/operator-framework/operator-sdk/pkg/sdk"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
- "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-type kanikoPublisher struct {
- buffer chan kanikoPublishOperation
- namespace string
- registry string
-}
-
-type kanikoPublishOperation struct {
- request build.Request
- assembled build.AssembledOutput
- packaged build.PackagedOutput
- output chan build.PublishedOutput
-}
-
-// NewKanikoPublisher creates a new publisher doing a Kaniko image push
-func NewKanikoPublisher(ctx context.Context, namespace string, registry
string) build.Publisher {
- publisher := kanikoPublisher{
- buffer: make(chan kanikoPublishOperation, 100),
- namespace: namespace,
- registry: registry,
- }
- go publisher.publishCycle(ctx)
- return &publisher
-}
-
-func (b *kanikoPublisher) Publish(request build.Request, assembled
build.AssembledOutput, packaged build.PackagedOutput) <-chan
build.PublishedOutput {
- res := make(chan build.PublishedOutput, 1)
- op := kanikoPublishOperation{
- request: request,
- assembled: assembled,
- packaged: packaged,
- output: res,
- }
- b.buffer <- op
- return res
-}
-
-func (b *kanikoPublisher) publishCycle(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- b.buffer = nil
- return
- case op := <-b.buffer:
- now := time.Now()
- logrus.Info("Starting a new image publication")
- res := b.execute(op.request, op.assembled, op.packaged)
- elapsed := time.Now().Sub(now)
-
- if res.Error != nil {
- logrus.Error("Error during publication (total
time ", elapsed.Seconds(), " seconds): ", res.Error)
- } else {
- logrus.Info("Publication completed in ",
elapsed.Seconds(), " seconds")
- }
-
- op.output <- res
- }
- }
-}
-
-func (b *kanikoPublisher) execute(request build.Request, assembled
build.AssembledOutput, packaged build.PackagedOutput) build.PublishedOutput {
- image, err := b.publish(packaged.TarFile, packaged.BaseImage, request)
- if err != nil {
- return build.PublishedOutput{Error: err}
- }
-
- return build.PublishedOutput{Image: image}
-}
-
-func (b *kanikoPublisher) publish(tarFile string, baseImageName string, source
build.Request) (string, error) {
- image := b.registry + "/" + b.namespace + "/camel-k-" +
source.Identifier.Name + ":" + source.Identifier.Qualifier
- contextDir, err := b.prepareContext(tarFile, baseImageName)
- if err != nil {
- return "", err
- }
- pod := v1.Pod{
- TypeMeta: metav1.TypeMeta{
- APIVersion: v1.SchemeGroupVersion.String(),
- Kind: "Pod",
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: b.namespace,
- Name: "camel-k-" + source.Identifier.Name,
- },
- Spec: v1.PodSpec{
- Containers: []v1.Container{
- {
- Name: "kaniko",
- Image:
"gcr.io/kaniko-project/executor@sha256:f29393d9c8d40296e1692417089aa2023494bce9afd632acac7dd0aea763e5bc",
- Args: []string{
- "--dockerfile=Dockerfile",
- "--context=" + contextDir,
- "--destination=" + image,
- "--insecure",
- },
- VolumeMounts: []v1.VolumeMount{
- {
- Name:
"camel-k-builder",
- MountPath: "/workspace",
- },
- },
- },
- },
- RestartPolicy: v1.RestartPolicyNever,
- Volumes: []v1.Volume{
- {
- Name: "camel-k-builder",
- VolumeSource: v1.VolumeSource{
- PersistentVolumeClaim:
&v1.PersistentVolumeClaimVolumeSource{
- ClaimName:
"camel-k-builder",
- ReadOnly: true,
- },
- },
- },
- },
- },
- }
-
- sdk.Delete(&pod)
- err = sdk.Create(&pod)
- if err != nil {
- return "", errors.Wrap(err, "cannot create kaniko builder pod")
- }
-
- err = kubernetes.WaitCondition(&pod, func(obj interface{}) (bool,
error) {
- if val, ok := obj.(*v1.Pod); ok {
- if val.Status.Phase == v1.PodSucceeded {
- return true, nil
- } else if val.Status.Phase == v1.PodFailed {
- return false, errors.New("build failed")
- }
- }
- return false, nil
- }, 10*time.Minute)
-
- if err != nil {
- return "", err
- }
-
- return image, nil
-}
-
-func (b *kanikoPublisher) prepareContext(tarName string, baseImage string)
(string, error) {
- baseDir, _ := path.Split(tarName)
- contextDir := path.Join(baseDir, "context")
- if err := b.unTar(tarName, contextDir); err != nil {
- return "", err
- }
-
- dockerFileContent := []byte(`
- FROM ` + baseImage + `
- ADD . /deployments
- `)
- if err := ioutil.WriteFile(path.Join(contextDir, "Dockerfile"),
dockerFileContent, 0777); err != nil {
- return "", err
- }
- return contextDir, nil
-}
-
-func (b *kanikoPublisher) unTar(tarName string, dir string) error {
- file, err := os.Open(tarName)
- if err != nil {
- return err
- }
- defer file.Close()
- reader := tarutils.NewReader(file)
- for {
- header, err := reader.Next()
- if err == io.EOF {
- break
- }
- if err != nil {
- return err
- }
- targetName := path.Join(dir, header.Name)
- targetDir, _ := path.Split(targetName)
- if err := os.MkdirAll(targetDir, 0777); err != nil {
- return err
- }
- buffer, err := ioutil.ReadAll(reader)
- if err != nil {
- return err
- }
- if err := ioutil.WriteFile(targetName, buffer,
os.FileMode(header.Mode)); err != nil {
- return err
- }
- }
- return nil
-}
diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go
new file mode 100644
index 0000000..45da05f
--- /dev/null
+++ b/pkg/builder/builder.go
@@ -0,0 +1,202 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 builder
+
+import (
+ "context"
+ "errors"
+ "io/ioutil"
+ "os"
+ "sort"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+
+ "github.com/sirupsen/logrus"
+)
+
+// ********************************
+//
+// Default builder
+//
+// ********************************
+
+type defaultBuilder struct {
+ log *logrus.Entry
+ ctx context.Context
+ requests chan Request
+ interrupt chan bool
+ request sync.Map
+ running int32
+ namespace string
+}
+
+// New --
+func New(ctx context.Context, namespace string) Builder {
+ m := defaultBuilder{
+ log: logrus.WithField("logger", "builder"),
+ ctx: ctx,
+ requests: make(chan Request),
+ interrupt: make(chan bool, 1),
+ running: 0,
+ namespace: namespace,
+ }
+
+ return &m
+}
+
+// Submit --
+func (b *defaultBuilder) Submit(request Request) Result {
+ if atomic.CompareAndSwapInt32(&b.running, 0, 1) {
+ go b.loop()
+ }
+
+ result, present := b.request.Load(request.Identifier)
+ if !present || result == nil {
+ result = Result{
+ Request: request,
+ Status: StatusSubmitted,
+ }
+
+ b.log.Infof("submitting request: %+v", request)
+
+ b.request.Store(request.Identifier, result)
+ b.requests <- request
+ }
+
+ return result.(Result)
+}
+
+// Purge --
+func (b *defaultBuilder) Purge(request Request) {
+ b.request.Delete(request.Identifier)
+}
+
+// ********************************
+//
+// Helpers
+//
+// ********************************
+
+func (b *defaultBuilder) loop() {
+ for atomic.LoadInt32(&b.running) == 1 {
+ select {
+ case <-b.ctx.Done():
+ b.interrupt <- true
+
+ close(b.interrupt)
+ close(b.requests)
+
+ atomic.StoreInt32(&b.running, 0)
+ case r, ok := <-b.requests:
+ if ok {
+ b.log.Infof("executing request: %+v", r)
+ b.submit(r)
+ }
+ }
+ }
+}
+
+func (b *defaultBuilder) submit(request Request) {
+ result, present := b.request.Load(request.Identifier)
+ if !present || result == nil {
+ b.log.Panicf("no info found for: %+v", request.Identifier)
+ }
+
+ // update the status
+ r := result.(Result)
+ r.Status = StatusStarted
+ r.ProcessStartedAt = time.Now()
+
+ // create tmp path
+ tmp, err := ioutil.TempDir(os.TempDir(), "builder-")
+ if err != nil {
+ r.Status = StatusError
+ r.Error = err
+ }
+
+ os.RemoveAll(tmp)
+
+ // update the cache
+ b.request.Store(request.Identifier, r)
+
+ c := Context{
+ C: b.ctx,
+ Values: make(map[string]interface{}),
+ Path: tmp,
+ Libraries: make([]v1alpha1.Artifact, 0),
+ StepsDone: make([]string, 0),
+ Namespace: b.namespace,
+ Request: request,
+ }
+
+ // Sort steps by phase
+ sort.SliceStable(request.Steps, func(i, j int) bool {
+ return request.Steps[i].Phase() < request.Steps[j].Phase()
+ })
+
+ for _, step := range request.Steps {
+ if c.Error != nil {
+ break
+ }
+
+ select {
+ case <-b.interrupt:
+ c.Error = errors.New("build canceled")
+ default:
+ l := b.log.WithFields(logrus.Fields{
+ "step": step.ID(),
+ "phase": step.Phase(),
+ "request": request.Identifier.String(),
+ })
+
+ l.Infof("executing step")
+
+ now := time.Now()
+ c.Error = step.Execute(&c)
+
+ if c.Error == nil {
+ c.StepsDone = append(c.StepsDone, step.ID())
+ l.Infof("step done in %f seconds",
time.Now().Sub(now).Seconds())
+ } else {
+ l.Infof("step failed with error: %s", c.Error)
+ }
+ }
+ }
+
+ r.Status = StatusCompleted
+ r.Image = c.Image
+ r.ProcessCompletedAt = time.Now()
+ r.Error = c.Error
+
+ if r.Error != nil {
+ r.Status = StatusError
+ }
+
+ r.Classpath = make([]string, 0, len(c.Libraries))
+ for _, l := range c.Libraries {
+ r.Classpath = append(r.Classpath, l.ID)
+ }
+
+ // update the cache
+ b.request.Store(request.Identifier, r)
+
+ b.log.Infof("request %s:%s executed in %f seconds",
r.Request.Identifier.Name, r.Request.Identifier.Qualifier,
r.ProcessCompletedAt.Sub(r.ProcessStartedAt).Seconds())
+}
diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
new file mode 100644
index 0000000..98c83ee
--- /dev/null
+++ b/pkg/builder/builder_steps.go
@@ -0,0 +1,296 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 builder
+
+import (
+ "encoding/xml"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "path"
+ "strings"
+
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+ "github.com/operator-framework/operator-sdk/pkg/sdk"
+
+ "github.com/apache/camel-k/pkg/util/tar"
+
+ yaml "gopkg.in/yaml.v2"
+
+ "github.com/pkg/errors"
+
+ "github.com/apache/camel-k/pkg/util/maven"
+ "github.com/apache/camel-k/version"
+
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// GenerateProject --
+func GenerateProject(ctx *Context) error {
+ ctx.Project = maven.Project{
+ XMLName: xml.Name{Local: "project"},
+ XMLNs: "http://maven.apache.org/POM/4.0.0",
+ XMLNsXsi: "http://www.w3.org/2001/XMLSchema-instance",
+ XsiSchemaLocation: "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd",
+ ModelVersion: "4.0.0",
+ GroupID: "org.apache.camel.k.integration",
+ ArtifactID: "camel-k-integration",
+ Version: version.Version,
+ DependencyManagement: maven.DependencyManagement{
+ Dependencies: maven.Dependencies{
+ Dependencies: []maven.Dependency{
+ {
+ //TODO: camel version should be
retrieved from an external request or provided as static version
+ GroupID: "org.apache.camel",
+ ArtifactID: "camel-bom",
+ Version: "2.22.2",
+ Type: "pom",
+ Scope: "import",
+ },
+ },
+ },
+ },
+ Dependencies: maven.Dependencies{
+ Dependencies: make([]maven.Dependency, 0),
+ },
+ }
+
+ //
+ // set-up dependencies
+ //
+
+ deps := &ctx.Project.Dependencies
+ deps.AddGAV("org.apache.camel.k", "camel-k-runtime-jvm",
version.Version)
+
+ for _, d := range ctx.Request.Dependencies {
+ if strings.HasPrefix(d, "camel:") {
+ artifactID := strings.TrimPrefix(d, "camel:")
+
+ if !strings.HasPrefix(artifactID, "camel-") {
+ artifactID = "camel-" + artifactID
+ }
+
+ deps.AddGAV("org.apache.camel", artifactID, "")
+ } else if strings.HasPrefix(d, "mvn:") {
+ mid := strings.TrimPrefix(d, "mvn:")
+ gav := strings.Replace(mid, "/", ":", -1)
+
+ deps.AddEncodedGAV(gav)
+ } else if strings.HasPrefix(d, "runtime:") {
+ artifactID := strings.Replace(d, "runtime:",
"camel-k-runtime-", 1)
+
+ deps.AddGAV("org.apache.camel.k", artifactID,
version.Version)
+ } else {
+ return fmt.Errorf("unknown dependency type: %s", d)
+ }
+ }
+
+ return nil
+}
+
+// ComputeDependencies --
+func ComputeDependencies(ctx *Context) error {
+ p := path.Join(ctx.Path, "maven")
+
+ err := maven.CreateStructure(p, ctx.Project)
+ if err != nil {
+ return err
+ }
+
+ goal :=
fmt.Sprintf("org.apache.camel.k:camel-k-runtime-dependency-lister:%s:generate-dependency-list",
version.Version)
+
+ err = maven.Run(p, MavenExtraOptions(), goal)
+ if err != nil {
+ return errors.Wrap(err, "failure while determining classpath")
+ }
+
+ dependencies := path.Join(p, "target", "dependencies.yaml")
+ content, err := ioutil.ReadFile(dependencies)
+ if err != nil {
+ return err
+ }
+
+ cp := make(map[string][]v1alpha1.Artifact)
+ err = yaml.Unmarshal(content, &cp)
+ if err != nil {
+ return err
+ }
+
+ for _, e := range cp["dependencies"] {
+ ctx.Libraries = append(ctx.Libraries, v1alpha1.Artifact{
+ ID: e.ID,
+ Location: e.Location,
+ })
+ }
+
+ return nil
+}
+
+// ArtifactsSelector --
+type ArtifactsSelector func([]v1alpha1.Artifact) (string, []v1alpha1.Artifact,
error)
+
+// StandardPackager --
+func StandardPackager(ctx *Context) error {
+ return packager(ctx, func(libraries []v1alpha1.Artifact) (string,
[]v1alpha1.Artifact, error) {
+ return "fabric8/s2i-java:2.3", libraries, nil
+ })
+}
+
+// IncrementalPackager --
+func IncrementalPackager(ctx *Context) error {
+ images, err := ListPublishedImages(ctx.Namespace)
+ if err != nil {
+ return err
+ }
+
+ return packager(ctx, func(libraries []v1alpha1.Artifact) (string,
[]v1alpha1.Artifact, error) {
+ bestImage, commonLibs := FindBestImage(images, libraries)
+ if bestImage != nil {
+ selectedClasspath := make([]v1alpha1.Artifact, 0)
+ for _, entry := range libraries {
+ if _, isCommon := commonLibs[entry.ID];
!isCommon {
+ selectedClasspath =
append(selectedClasspath, entry)
+ }
+ }
+
+ return bestImage.Image, selectedClasspath, nil
+ }
+
+ // return default selection
+ return "fabric8/s2i-java:2.3", libraries, nil
+ })
+}
+
+func packager(ctx *Context, selector ArtifactsSelector) error {
+ imageName, selectedArtifacts, err := selector(ctx.Libraries)
+ if err != nil {
+ return err
+ }
+
+ tarFileName := path.Join(ctx.Path, "package", "occi.tar")
+ tarFileDir := path.Dir(tarFileName)
+
+ err = os.MkdirAll(tarFileDir, 0777)
+ if err != nil {
+ return err
+ }
+
+ tarAppender, err := tar.NewAppender(tarFileName)
+ if err != nil {
+ return err
+ }
+ defer tarAppender.Close()
+
+ tarDir := "dependencies/"
+ for _, entry := range selectedArtifacts {
+ gav, err := maven.ParseGAV(entry.ID)
+ if err != nil {
+ return err
+ }
+
+ tarPath := path.Join(tarDir, gav.GroupID)
+ _, err = tarAppender.AddFile(entry.Location, tarPath)
+ if err != nil {
+ return err
+ }
+ }
+
+ cp := ""
+ for _, entry := range ctx.Libraries {
+ gav, err := maven.ParseGAV(entry.ID)
+ if err != nil {
+ return nil
+ }
+ tarPath := path.Join(tarDir, gav.GroupID)
+ _, fileName := path.Split(entry.Location)
+ fileName = path.Join(tarPath, fileName)
+ cp += fileName + "\n"
+ }
+
+ err = tarAppender.AppendData([]byte(cp), "classpath")
+ if err != nil {
+ return err
+ }
+
+ ctx.Image = imageName //"fabric8/s2i-java:2.3"
+ ctx.Archive = tarFileName
+
+ return nil
+}
+
+// ListPublishedImages --
+func ListPublishedImages(namespace string) ([]PublishedImage, error) {
+ list := v1alpha1.NewIntegrationContextList()
+
+ err := sdk.List(namespace, &list,
sdk.WithListOptions(&metav1.ListOptions{}))
+ if err != nil {
+ return nil, err
+ }
+ images := make([]PublishedImage, 0)
+ for _, ctx := range list.Items {
+ if ctx.Status.Phase != v1alpha1.IntegrationContextPhaseReady ||
ctx.Labels == nil {
+ continue
+ }
+ if ctxType, present :=
ctx.Labels["camel.apache.org/context.type"]; !present || ctxType != "platform" {
+ continue
+ }
+
+ images = append(images, PublishedImage{
+ Image: ctx.Status.Image,
+ Classpath: ctx.Status.Classpath,
+ })
+ }
+ return images, nil
+}
+
+// FindBestImage --
+func FindBestImage(images []PublishedImage, entries []v1alpha1.Artifact)
(*PublishedImage, map[string]bool) {
+ if len(images) == 0 {
+ return nil, nil
+ }
+ requiredLibs := make(map[string]bool, len(entries))
+ for _, entry := range entries {
+ requiredLibs[entry.ID] = true
+ }
+
+ var bestImage PublishedImage
+ bestImageCommonLibs := make(map[string]bool, 0)
+ bestImageSurplusLibs := 0
+ for _, image := range images {
+ common := make(map[string]bool)
+ for _, id := range image.Classpath {
+ if _, ok := requiredLibs[id]; ok {
+ common[id] = true
+ }
+ }
+ numCommonLibs := len(common)
+ surplus := len(image.Classpath) - numCommonLibs
+ if surplus >= numCommonLibs/3 {
+ // Heuristic approach: if there are too many unrelated
libraries, just use the base image
+ continue
+ }
+
+ if numCommonLibs > len(bestImageCommonLibs) || (numCommonLibs
== len(bestImageCommonLibs) && surplus < bestImageSurplusLibs) {
+ bestImage = image
+ bestImageCommonLibs = common
+ bestImageSurplusLibs = surplus
+ }
+ }
+
+ return &bestImage, bestImageCommonLibs
+}
diff --git a/pkg/builder/builder_types.go b/pkg/builder/builder_types.go
new file mode 100644
index 0000000..7476b00
--- /dev/null
+++ b/pkg/builder/builder_types.go
@@ -0,0 +1,137 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 builder
+
+import (
+ "context"
+ "time"
+
+ "github.com/apache/camel-k/pkg/util/maven"
+
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+)
+
+// Builder --
+type Builder interface {
+ Submit(request Request) Result
+ Purge(request Request)
+}
+
+// Step --
+type Step interface {
+ ID() string
+ Phase() int
+ Execute(*Context) error
+}
+
+type stepWrapper struct {
+ id string
+ phase int
+ task func(*Context) error
+}
+
+func (s *stepWrapper) ID() string {
+ return s.id
+}
+
+func (s *stepWrapper) Phase() int {
+ return s.phase
+}
+
+func (s *stepWrapper) Execute(ctx *Context) error {
+ return s.task(ctx)
+}
+
+// NewStep --
+func NewStep(ID string, phase int, task func(*Context) error) Step {
+ s := stepWrapper{
+ id: ID,
+ phase: phase,
+ task: task,
+ }
+
+ return &s
+}
+
+// Identifier --
+type Identifier struct {
+ Name string
+ Qualifier string
+}
+
+func (r *Identifier) String() string {
+ return r.Name + ":" + r.Qualifier
+}
+
+// Request --
+type Request struct {
+ Identifier Identifier
+ Platform v1alpha1.IntegrationPlatformSpec
+ Code v1alpha1.SourceSpec
+ Dependencies []string
+ Steps []Step
+}
+
+// Result represents the result of a build
+type Result struct {
+ Request Request
+ Status Status
+ Image string
+ Error error
+ Classpath []string
+ ProcessStartedAt time.Time
+ ProcessCompletedAt time.Time
+}
+
+// Context --
+type Context struct {
+ C context.Context
+ Namespace string
+ Values map[string]interface{}
+ Request Request
+ Project maven.Project
+ Path string
+ Libraries []v1alpha1.Artifact
+ Image string
+ Error error
+ StepsDone []string
+ Archive string
+}
+
+// PublishedImage --
+type PublishedImage struct {
+ Image string
+ Classpath []string
+}
+
+// Status --
+type Status int
+
+const (
+ // StatusSubmitted --
+ StatusSubmitted Status = iota
+
+ // StatusStarted --
+ StatusStarted
+
+ // StatusCompleted --
+ StatusCompleted
+
+ // StatusError --
+ StatusError
+)
diff --git a/pkg/build/assemble/doc.go b/pkg/builder/builder_utils.go
similarity index 77%
rename from pkg/build/assemble/doc.go
rename to pkg/builder/builder_utils.go
index 20b1d42..1a9fb62 100644
--- a/pkg/build/assemble/doc.go
+++ b/pkg/builder/builder_utils.go
@@ -15,5 +15,14 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-// Package assemble contains tools that convert source files and dependencies
into the integration classpath
-package assemble
+package builder
+
+import "os"
+
+// MavenExtraOptions --
+func MavenExtraOptions() string {
+ if _, err := os.Stat("/tmp/artifacts/m2"); err == nil {
+ return "-Dmaven.repo.local=/tmp/artifacts/m2"
+ }
+ return "-Dcamel.noop=true"
+}
diff --git a/pkg/build/packager/doc.go b/pkg/builder/kaniko/kaniko.go
similarity index 68%
rename from pkg/build/packager/doc.go
rename to pkg/builder/kaniko/kaniko.go
index cfa21c6..318958f 100644
--- a/pkg/build/packager/doc.go
+++ b/pkg/builder/kaniko/kaniko.go
@@ -15,5 +15,16 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-// Package packager contains strategies for building layers of a Docker image
-package packager
+package kaniko
+
+import (
+ "github.com/apache/camel-k/pkg/builder"
+)
+
+// DefaultSteps --
+var DefaultSteps = []builder.Step{
+ builder.NewStep("generate", 10, builder.GenerateProject),
+ builder.NewStep("dependencies", 20, builder.ComputeDependencies),
+ builder.NewStep("packager", 30, builder.StandardPackager),
+ builder.NewStep("publisher", 40, Publisher),
+}
diff --git a/pkg/builder/kaniko/publisher.go b/pkg/builder/kaniko/publisher.go
new file mode 100644
index 0000000..3cc976b
--- /dev/null
+++ b/pkg/builder/kaniko/publisher.go
@@ -0,0 +1,120 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 kaniko
+
+import (
+ "io/ioutil"
+ "path"
+ "time"
+
+ "github.com/apache/camel-k/pkg/builder"
+ "github.com/apache/camel-k/pkg/util/tar"
+
+ "github.com/apache/camel-k/pkg/util/kubernetes"
+ "github.com/operator-framework/operator-sdk/pkg/sdk"
+ "github.com/pkg/errors"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// Publisher --
+func Publisher(ctx *builder.Context) error {
+ image := ctx.Request.Platform.Build.Registry + "/" + ctx.Namespace +
"/camel-k-" + ctx.Request.Identifier.Name + ":" +
ctx.Request.Identifier.Qualifier
+ baseDir, _ := path.Split(ctx.Archive)
+ contextDir := path.Join(baseDir, "context")
+ if err := tar.Extract(ctx.Archive, contextDir); err != nil {
+ return err
+ }
+
+ dockerFileContent := []byte(`
+ FROM ` + ctx.Image + `
+ ADD . /deployments
+ `)
+
+ err := ioutil.WriteFile(path.Join(contextDir, "Dockerfile"),
dockerFileContent, 0777)
+ if err != nil {
+ return err
+ }
+
+ pod := v1.Pod{
+ TypeMeta: metav1.TypeMeta{
+ APIVersion: v1.SchemeGroupVersion.String(),
+ Kind: "Pod",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: ctx.Namespace,
+ Name: "camel-k-" + ctx.Request.Identifier.Name,
+ },
+ Spec: v1.PodSpec{
+ Containers: []v1.Container{
+ {
+ Name: "kaniko",
+ Image:
"gcr.io/kaniko-project/executor@sha256:f29393d9c8d40296e1692417089aa2023494bce9afd632acac7dd0aea763e5bc",
+ Args: []string{
+ "--dockerfile=Dockerfile",
+ "--context=" + contextDir,
+ "--destination=" + image,
+ "--insecure",
+ },
+ VolumeMounts: []v1.VolumeMount{
+ {
+ Name:
"camel-k-builder",
+ MountPath: "/workspace",
+ },
+ },
+ },
+ },
+ RestartPolicy: v1.RestartPolicyNever,
+ Volumes: []v1.Volume{
+ {
+ Name: "camel-k-builder",
+ VolumeSource: v1.VolumeSource{
+ PersistentVolumeClaim:
&v1.PersistentVolumeClaimVolumeSource{
+ ClaimName:
"camel-k-builder",
+ ReadOnly: true,
+ },
+ },
+ },
+ },
+ },
+ }
+
+ sdk.Delete(&pod)
+ err = sdk.Create(&pod)
+ if err != nil {
+ return errors.Wrap(err, "cannot create kaniko builder pod")
+ }
+
+ err = kubernetes.WaitCondition(&pod, func(obj interface{}) (bool,
error) {
+ if val, ok := obj.(*v1.Pod); ok {
+ if val.Status.Phase == v1.PodSucceeded {
+ return true, nil
+ } else if val.Status.Phase == v1.PodFailed {
+ return false, errors.New("build failed")
+ }
+ }
+ return false, nil
+ }, 10*time.Minute)
+
+ if err != nil {
+ return err
+ }
+
+ ctx.Image = image
+ return nil
+}
diff --git a/pkg/build/publish/s2i_publisher.go b/pkg/builder/s2i/publisher.go
similarity index 52%
rename from pkg/build/publish/s2i_publisher.go
rename to pkg/builder/s2i/publisher.go
index 09a0105..e6b0d92 100644
--- a/pkg/build/publish/s2i_publisher.go
+++ b/pkg/builder/s2i/publisher.go
@@ -15,103 +15,38 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-package publish
+package s2i
import (
- "context"
"io/ioutil"
"time"
- "github.com/apache/camel-k/pkg/build"
+ "github.com/apache/camel-k/pkg/builder"
+
"github.com/apache/camel-k/pkg/util/kubernetes"
"github.com/apache/camel-k/pkg/util/kubernetes/customclient"
- buildv1 "github.com/openshift/api/build/v1"
- imagev1 "github.com/openshift/api/image/v1"
"github.com/operator-framework/operator-sdk/pkg/sdk"
"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
"k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-)
-
-type s2iPublisher struct {
- buffer chan s2iPublishOperation
- namespace string
-}
-type s2iPublishOperation struct {
- request build.Request
- assembled build.AssembledOutput
- packaged build.PackagedOutput
- output chan build.PublishedOutput
-}
-
-// NewS2IPublisher creates a new publisher doing a Openshift S2I binary build
-func NewS2IPublisher(ctx context.Context, namespace string) build.Publisher {
- publisher := s2iPublisher{
- buffer: make(chan s2iPublishOperation, 100),
- namespace: namespace,
- }
- go publisher.publishCycle(ctx)
- return &publisher
-}
-
-func (b *s2iPublisher) Publish(request build.Request, assembled
build.AssembledOutput, packaged build.PackagedOutput) <-chan
build.PublishedOutput {
- res := make(chan build.PublishedOutput, 1)
- op := s2iPublishOperation{
- request: request,
- assembled: assembled,
- packaged: packaged,
- output: res,
- }
- b.buffer <- op
- return res
-}
-
-func (b *s2iPublisher) publishCycle(ctx context.Context) {
- for {
- select {
- case <-ctx.Done():
- b.buffer = nil
- return
- case op := <-b.buffer:
- now := time.Now()
- logrus.Info("Starting a new image publication")
- res := b.execute(op.request, op.assembled, op.packaged)
- elapsed := time.Now().Sub(now)
-
- if res.Error != nil {
- logrus.Error("Error during publication (total
time ", elapsed.Seconds(), " seconds): ", res.Error)
- } else {
- logrus.Info("Publication completed in ",
elapsed.Seconds(), " seconds")
- }
-
- op.output <- res
- }
- }
-}
-
-func (b *s2iPublisher) execute(request build.Request, assembled
build.AssembledOutput, packaged build.PackagedOutput) build.PublishedOutput {
- image, err := b.publish(packaged.TarFile, packaged.BaseImage, request)
- if err != nil {
- return build.PublishedOutput{Error: err}
- }
-
- return build.PublishedOutput{Image: image}
-}
+ buildv1 "github.com/openshift/api/build/v1"
+ imagev1 "github.com/openshift/api/image/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-func (b *s2iPublisher) publish(tarFile string, imageName string, source
build.Request) (string, error) {
+ "github.com/pkg/errors"
+)
+// Publisher --
+func Publisher(ctx *builder.Context) error {
bc := buildv1.BuildConfig{
TypeMeta: metav1.TypeMeta{
APIVersion: buildv1.SchemeGroupVersion.String(),
Kind: "BuildConfig",
},
ObjectMeta: metav1.ObjectMeta{
- Name: "camel-k-" + source.Identifier.Name,
- Namespace: b.namespace,
+ Name: "camel-k-" + ctx.Request.Identifier.Name,
+ Namespace: ctx.Namespace,
},
Spec: buildv1.BuildConfigSpec{
CommonSpec: buildv1.CommonSpec{
@@ -122,14 +57,14 @@ func (b *s2iPublisher) publish(tarFile string, imageName
string, source build.Re
SourceStrategy:
&buildv1.SourceBuildStrategy{
From: v1.ObjectReference{
Kind: "DockerImage",
- Name: imageName,
+ Name: ctx.Image,
},
},
},
Output: buildv1.BuildOutput{
To: &v1.ObjectReference{
Kind: "ImageStreamTag",
- Name: "camel-k-" +
source.Identifier.Name + ":" + source.Identifier.Qualifier,
+ Name: "camel-k-" +
ctx.Request.Identifier.Name + ":" + ctx.Request.Identifier.Qualifier,
},
},
},
@@ -139,7 +74,7 @@ func (b *s2iPublisher) publish(tarFile string, imageName
string, source build.Re
sdk.Delete(&bc)
err := sdk.Create(&bc)
if err != nil {
- return "", errors.Wrap(err, "cannot create build config")
+ return errors.Wrap(err, "cannot create build config")
}
is := imagev1.ImageStream{
@@ -148,8 +83,8 @@ func (b *s2iPublisher) publish(tarFile string, imageName
string, source build.Re
Kind: "ImageStream",
},
ObjectMeta: metav1.ObjectMeta{
- Name: "camel-k-" + source.Identifier.Name,
- Namespace: b.namespace,
+ Name: "camel-k-" + ctx.Request.Identifier.Name,
+ Namespace: ctx.Namespace,
},
Spec: imagev1.ImageStreamSpec{
LookupPolicy: imagev1.ImageLookupPolicy{
@@ -161,45 +96,45 @@ func (b *s2iPublisher) publish(tarFile string, imageName
string, source build.Re
sdk.Delete(&is)
err = sdk.Create(&is)
if err != nil {
- return "", errors.Wrap(err, "cannot create image stream")
+ return errors.Wrap(err, "cannot create image stream")
}
- resource, err := ioutil.ReadFile(tarFile)
+ resource, err := ioutil.ReadFile(ctx.Archive)
if err != nil {
- return "", errors.Wrap(err, "cannot fully read tar file
"+tarFile)
+ return errors.Wrap(err, "cannot fully read tar file
"+ctx.Archive)
}
restClient, err := customclient.GetClientFor("build.openshift.io", "v1")
if err != nil {
- return "", err
+ return err
}
result := restClient.Post().
- Namespace(b.namespace).
+ Namespace(ctx.Namespace).
Body(resource).
Resource("buildconfigs").
- Name("camel-k-" + source.Identifier.Name).
+ Name("camel-k-" + ctx.Request.Identifier.Name).
SubResource("instantiatebinary").
Do()
if result.Error() != nil {
- return "", errors.Wrap(result.Error(), "cannot instantiate
binary")
+ return errors.Wrap(result.Error(), "cannot instantiate binary")
}
data, err := result.Raw()
if err != nil {
- return "", errors.Wrap(err, "no raw data retrieved")
+ return errors.Wrap(err, "no raw data retrieved")
}
u := unstructured.Unstructured{}
err = u.UnmarshalJSON(data)
if err != nil {
- return "", errors.Wrap(err, "cannot unmarshal instantiate
binary response")
+ return errors.Wrap(err, "cannot unmarshal instantiate binary
response")
}
ocbuild, err := k8sutil.RuntimeObjectFromUnstructured(&u)
if err != nil {
- return "", err
+ return err
}
err = kubernetes.WaitCondition(ocbuild, func(obj interface{}) (bool,
error) {
@@ -217,11 +152,14 @@ func (b *s2iPublisher) publish(tarFile string, imageName
string, source build.Re
err = sdk.Get(&is)
if err != nil {
- return "", err
+ return err
}
if is.Status.DockerImageRepository == "" {
- return "", errors.New("dockerImageRepository not available in
ImageStream")
+ return errors.New("dockerImageRepository not available in
ImageStream")
}
- return is.Status.DockerImageRepository + ":" +
source.Identifier.Qualifier, nil
+
+ ctx.Image = is.Status.DockerImageRepository + ":" +
ctx.Request.Identifier.Qualifier
+
+ return nil
}
diff --git a/pkg/build/packager/types.go b/pkg/builder/s2i/s2i.go
similarity index 68%
rename from pkg/build/packager/types.go
rename to pkg/builder/s2i/s2i.go
index d424457..3dd6d5e 100644
--- a/pkg/build/packager/types.go
+++ b/pkg/builder/s2i/s2i.go
@@ -15,15 +15,14 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-package packager
+package s2i
-// PublishedImage represent a base image that can be used as starting point
-type PublishedImage struct {
- Image string
- Classpath []string
-}
+import "github.com/apache/camel-k/pkg/builder"
-// PublishedImagesLister allows to list all images already published
-type PublishedImagesLister interface {
- ListPublishedImages() ([]PublishedImage, error)
+// DefaultSteps --
+var DefaultSteps = []builder.Step{
+ builder.NewStep("generate", 10, builder.GenerateProject),
+ builder.NewStep("dependencies", 20, builder.ComputeDependencies),
+ builder.NewStep("packager", 30, builder.IncrementalPackager),
+ builder.NewStep("publisher", 40, Publisher),
}
diff --git a/pkg/platform/build.go b/pkg/platform/build.go
index 6e75ad2..7b6332a 100644
--- a/pkg/platform/build.go
+++ b/pkg/platform/build.go
@@ -20,78 +20,53 @@ package platform
import (
"context"
"errors"
+
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/build"
- "github.com/apache/camel-k/pkg/build/assemble"
- "github.com/apache/camel-k/pkg/build/packager"
- "github.com/apache/camel-k/pkg/build/publish"
- "github.com/operator-framework/operator-sdk/pkg/sdk"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "github.com/apache/camel-k/pkg/builder"
+ "github.com/apache/camel-k/pkg/builder/kaniko"
+ "github.com/apache/camel-k/pkg/builder/s2i"
)
-// buildManager is the current build manager
+// gBuilder is the current builder
// Note: it cannot be changed at runtime, needs a operator restart
-var buildManager *build.Manager
-
-// GetPlatformBuildManager returns a suitable build manager for the current
platform
-func GetPlatformBuildManager(ctx context.Context, namespace string)
(*build.Manager, error) {
- if buildManager != nil {
- return buildManager, nil
- }
- pl, err := GetCurrentPlatform(namespace)
- if err != nil {
- return nil, err
- }
-
- assembler := assemble.NewMavenAssembler(ctx)
- if pl.Spec.Build.PublishStrategy ==
v1alpha1.IntegrationPlatformBuildPublishStrategyS2I {
- packaging := packager.NewS2IIncrementalPackager(ctx,
newContextLister(namespace))
- publisher := publish.NewS2IPublisher(ctx, namespace)
- buildManager = build.NewManager(ctx, assembler, packaging,
publisher)
- } else if pl.Spec.Build.PublishStrategy ==
v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko &&
pl.Spec.Build.Registry != "" {
- packaging := packager.NewJavaStandardPackager(ctx)
- publisher := publish.NewKanikoPublisher(ctx, namespace,
pl.Spec.Build.Registry)
- buildManager = build.NewManager(ctx, assembler, packaging,
publisher)
- }
+var gBuilder builder.Builder
- if buildManager == nil {
- return nil, errors.New("unsupported platform configuration")
+// GetPlatformBuilder --
+func GetPlatformBuilder(ctx context.Context, namespace string)
(builder.Builder, error) {
+ if gBuilder != nil {
+ return gBuilder, nil
}
- return buildManager, nil
-}
-// =================================================================
+ gBuilder = builder.New(ctx, namespace)
-type contextLister struct {
- namespace string
+ return gBuilder, nil
}
-func newContextLister(namespace string) contextLister {
- return contextLister{
- namespace: namespace,
+// NewBuildRequest --
+func NewBuildRequest(ctx context.Context, context
*v1alpha1.IntegrationContext) (builder.Request, error) {
+ req := builder.Request{
+ Identifier: builder.Identifier{
+ Name: "context-" + context.Name,
+ Qualifier: context.ResourceVersion,
+ },
+ Dependencies: context.Spec.Dependencies,
+ Steps: kaniko.DefaultSteps,
}
-}
-func (l contextLister) ListPublishedImages() ([]packager.PublishedImage,
error) {
- list := v1alpha1.NewIntegrationContextList()
-
- err := sdk.List(l.namespace, &list,
sdk.WithListOptions(&metav1.ListOptions{}))
+ p, err := GetCurrentPlatform(context.Namespace)
if err != nil {
- return nil, err
+ return req, err
}
- images := make([]packager.PublishedImage, 0)
- for _, ctx := range list.Items {
- if ctx.Status.Phase != v1alpha1.IntegrationContextPhaseReady ||
ctx.Labels == nil {
- continue
- }
- if ctxType, present :=
ctx.Labels["camel.apache.org/context.type"]; !present || ctxType != "platform" {
- continue
- }
- images = append(images, packager.PublishedImage{
- Image: ctx.Status.Image,
- Classpath: ctx.Status.Classpath,
- })
+ req.Platform = p.Spec
+
+ if SupportsS2iPublishStrategy(p) {
+ req.Steps = s2i.DefaultSteps
+ } else if SupportsKanikoPublishStrategy(p) {
+ req.Steps = kaniko.DefaultSteps
+ } else {
+ return req, errors.New("unsupported platform configuration")
}
- return images, nil
+
+ return req, nil
}
diff --git a/pkg/platform/get.go b/pkg/platform/get.go
index c894818..afc9268 100644
--- a/pkg/platform/get.go
+++ b/pkg/platform/get.go
@@ -19,6 +19,7 @@ package platform
import (
"errors"
+
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
"github.com/operator-framework/operator-sdk/pkg/sdk"
)
@@ -64,4 +65,14 @@ func GetProfile(p *v1alpha1.IntegrationPlatform)
v1alpha1.TraitProfile {
return v1alpha1.TraitProfileOpenShift
}
return ""
-}
\ No newline at end of file
+}
+
+// SupportsS2iPublishStrategy --
+func SupportsS2iPublishStrategy(p *v1alpha1.IntegrationPlatform) bool {
+ return p.Spec.Build.PublishStrategy ==
v1alpha1.IntegrationPlatformBuildPublishStrategyS2I
+}
+
+// SupportsKanikoPublishStrategy --
+func SupportsKanikoPublishStrategy(p *v1alpha1.IntegrationPlatform) bool {
+ return p.Spec.Build.PublishStrategy ==
v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && p.Spec.Build.Registry
!= ""
+}
diff --git a/pkg/stub/action/context/build.go b/pkg/stub/action/context/build.go
index 831218f..cc34101 100644
--- a/pkg/stub/action/context/build.go
+++ b/pkg/stub/action/context/build.go
@@ -20,15 +20,14 @@ package context
import (
"context"
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+ "github.com/apache/camel-k/pkg/builder"
"github.com/apache/camel-k/pkg/platform"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/operator-framework/operator-sdk/pkg/sdk"
"github.com/sirupsen/logrus"
-
- "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/build"
)
// NewBuildAction creates a new build handling action for the context
@@ -51,38 +50,37 @@ func (action *buildAction) CanHandle(context
*v1alpha1.IntegrationContext) bool
}
func (action *buildAction) Handle(context *v1alpha1.IntegrationContext) error {
- buildManager, err := platform.GetPlatformBuildManager(action.Context,
context.Namespace)
+ b, err := platform.GetPlatformBuilder(action.Context, context.Namespace)
if err != nil {
return err
}
-
- buildIdentifier := build.Identifier{
- Name: "context-" + context.Name,
- Qualifier: context.ResourceVersion,
+ r, err := platform.NewBuildRequest(action.Context, context)
+ if err != nil {
+ return err
}
- buildResult := buildManager.Get(buildIdentifier)
- if buildResult.Status == build.StatusNotRequested {
- buildManager.Start(build.Request{
- Identifier: buildIdentifier,
- Dependencies: context.Spec.Dependencies,
- })
+ res := b.Submit(r)
+ if res.Status == builder.StatusSubmitted {
+ logrus.Info("Build submitted")
+ } else if res.Status == builder.StatusStarted {
logrus.Info("Build started")
- } else if buildResult.Status == build.StatusError {
+ } else if res.Status == builder.StatusError {
target := context.DeepCopy()
- logrus.Info("Context ", target.Name, " transitioning to state
", v1alpha1.IntegrationContextPhaseError)
target.Status.Phase = v1alpha1.IntegrationContextPhaseError
+
+ logrus.Info("Context ", target.Name, " transitioning to state
", v1alpha1.IntegrationContextPhaseError)
+
+ // remove the build from cache
+ b.Purge(r)
+
return sdk.Update(target)
- } else if buildResult.Status == build.StatusCompleted {
+ } else if res.Status == builder.StatusCompleted {
target := context.DeepCopy()
- target.Status.Image = buildResult.Image
- logrus.Info("Context ", target.Name, " transitioning to state
", v1alpha1.IntegrationContextPhaseReady)
+ target.Status.Image = res.Image
target.Status.Phase = v1alpha1.IntegrationContextPhaseReady
+ target.Status.Classpath = res.Classpath
- target.Status.Classpath = make([]string,
len(buildResult.Classpath))
- for i, entry := range buildResult.Classpath {
- target.Status.Classpath[i] = entry.ID
- }
+ logrus.Info("Context ", target.Name, " transitioning to state
", v1alpha1.IntegrationContextPhaseReady)
if err := sdk.Update(target); err != nil {
return err
@@ -90,6 +88,9 @@ func (action *buildAction) Handle(context
*v1alpha1.IntegrationContext) error {
if err := action.informIntegrations(target); err != nil {
return err
}
+
+ // remove the build from cache
+ b.Purge(r)
}
return nil
diff --git a/pkg/util/maven/maven.go b/pkg/util/maven/maven.go
index 5550122..019723b 100644
--- a/pkg/util/maven/maven.go
+++ b/pkg/util/maven/maven.go
@@ -20,19 +20,14 @@ package maven
import (
"bytes"
"encoding/xml"
- "fmt"
- "io/ioutil"
"os"
"os/exec"
- "path"
"regexp"
"strings"
- "github.com/apache/camel-k/version"
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+ "github.com/apache/camel-k/pkg/util"
- "gopkg.in/yaml.v2"
-
- "github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
@@ -42,76 +37,35 @@ const (
// BuildResult --
type BuildResult struct {
- Classpath []ClasspathLibrary
-}
-
-// ClasspathLibrary --
-type ClasspathLibrary struct {
- ID string `json:"id" yaml:"id"`
- Location string `json:"location,omitempty" yaml:"location,omitempty"`
+ Classpath []v1alpha1.Artifact
}
-// Process takes a project description and returns a binary tar with the built
artifacts
-func Process(project Project) (BuildResult, error) {
- res := BuildResult{}
- buildDir, err := ioutil.TempDir("", buildDirPrefix)
- if err != nil {
- return res, errors.Wrap(err, "could not create temporary dir
for maven source files")
- }
-
- defer os.RemoveAll(buildDir)
-
- err = createMavenStructure(buildDir, project)
- if err != nil {
- return res, errors.Wrap(err, "could not write maven source
files")
- }
- err = runMavenBuild(buildDir, &res)
- return res, err
-}
-
-func runMavenBuild(buildDir string, result *BuildResult) error {
- goal :=
fmt.Sprintf("org.apache.camel.k:camel-k-runtime-dependency-lister:%s:generate-dependency-list",
version.Version)
- cmd := exec.Command("mvn", mavenExtraOptions(), goal)
- cmd.Dir = buildDir
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
+// GeneratePomContent generate a pom.xml file from the given project definition
+func GeneratePomContent(project Project) (string, error) {
+ w := &bytes.Buffer{}
+ w.WriteString(xml.Header)
- logrus.Infof("determine classpath: %v", cmd.Args)
- if err := cmd.Run(); err != nil {
- return errors.Wrap(err, "failure while determining classpath")
- }
+ e := xml.NewEncoder(w)
+ e.Indent("", " ")
- dependencies := path.Join(buildDir, "target", "dependencies.yaml")
- content, err := ioutil.ReadFile(dependencies)
+ err := e.Encode(project)
if err != nil {
- return err
- }
-
- cp := make(map[string][]ClasspathLibrary)
- if err := yaml.Unmarshal(content, &cp); err != nil {
- return err
+ return "", err
}
- result.Classpath = cp["dependencies"]
-
- logrus.Info("Maven build completed successfully")
- return nil
+ return w.String(), nil
}
-func mavenExtraOptions() string {
- if _, err := os.Stat("/tmp/artifacts/m2"); err == nil {
- return "-Dmaven.repo.local=/tmp/artifacts/m2"
- }
- return "-Dcamel.noop=true"
-}
+// CreateStructure --
+func CreateStructure(buildDir string, project Project) error {
+ logrus.Infof("write project: %+v", project)
-func createMavenStructure(buildDir string, project Project) error {
- pom, err := GeneratePomFileContent(project)
+ pom, err := GeneratePomContent(project)
if err != nil {
return err
}
- err = writeFile(buildDir, "pom.xml", pom)
+ err = util.WriteFileWithContent(buildDir, "pom.xml", pom)
if err != nil {
return err
}
@@ -119,42 +73,25 @@ func createMavenStructure(buildDir string, project
Project) error {
return nil
}
-func writeFile(buildDir string, relativePath string, content string) error {
- filePath := path.Join(buildDir, relativePath)
- fileDir := path.Dir(filePath)
- // Create dir if not present
- err := os.MkdirAll(fileDir, 0777)
- if err != nil {
- return errors.Wrap(err, "could not create dir for file
"+relativePath)
+// Run --
+func Run(buildDir string, args ...string) error {
+ mvnCmd := "mvn"
+ if c, ok := os.LookupEnv("MAVEN_CMD"); ok {
+ mvnCmd = c
}
- // Create file
- file, err := os.Create(filePath)
- if err != nil {
- return errors.Wrap(err, "could not create file "+relativePath)
- }
- defer file.Close()
- _, err = file.WriteString(content)
- if err != nil {
- errors.Wrap(err, "could not write to file "+relativePath)
- }
- return nil
-}
+ l := logrus.WithFields(logrus.Fields{
+ "logger": "maven",
+ })
-// GeneratePomFileContent generate a pom.xml file from the given project
definition
-func GeneratePomFileContent(project Project) (string, error) {
- w := &bytes.Buffer{}
- w.WriteString(xml.Header)
-
- e := xml.NewEncoder(w)
- e.Indent("", " ")
+ cmd := exec.Command(mvnCmd, args...)
+ cmd.Dir = buildDir
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
- err := e.Encode(project)
- if err != nil {
- return "", err
- }
+ l.Infof("execute: %s", strings.Join(cmd.Args, " "))
- return w.String(), nil
+ return cmd.Run()
}
// ParseGAV decode a maven artifact id to a dependency definition.
diff --git a/pkg/util/maven/maven_test.go b/pkg/util/maven/maven_test.go
index d21109c..e7f5685 100644
--- a/pkg/util/maven/maven_test.go
+++ b/pkg/util/maven/maven_test.go
@@ -146,7 +146,7 @@ func TestPomGeneration(t *testing.T) {
},
}
- pom, err := GeneratePomFileContent(project)
+ pom, err := GeneratePomContent(project)
assert.Nil(t, err)
assert.NotNil(t, pom)
diff --git a/pkg/build/publish/doc.go b/pkg/util/tar/extract.go
similarity index 50%
rename from pkg/build/publish/doc.go
rename to pkg/util/tar/extract.go
index 19343a8..4592a6e 100644
--- a/pkg/build/publish/doc.go
+++ b/pkg/util/tar/extract.go
@@ -15,5 +15,45 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-// Package publish contains strategies for publishing integrations into a
Docker registries
-package publish
+package tar
+
+import (
+ "io"
+ "io/ioutil"
+ "os"
+ "path"
+
+ tarutils "archive/tar"
+)
+
+// Extract --
+func Extract(source string, destinationBase string) error {
+ file, err := os.Open(source)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ reader := tarutils.NewReader(file)
+ for {
+ header, err := reader.Next()
+ if err == io.EOF {
+ break
+ }
+ if err != nil {
+ return err
+ }
+ targetName := path.Join(destinationBase, header.Name)
+ targetDir, _ := path.Split(targetName)
+ if err := os.MkdirAll(targetDir, 0777); err != nil {
+ return err
+ }
+ buffer, err := ioutil.ReadAll(reader)
+ if err != nil {
+ return err
+ }
+ if err := ioutil.WriteFile(targetName, buffer,
os.FileMode(header.Mode)); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff --git a/pkg/util/util.go b/pkg/util/util.go
index dcfbd36..fba0619 100644
--- a/pkg/util/util.go
+++ b/pkg/util/util.go
@@ -20,7 +20,10 @@ package util
import (
"os"
"os/signal"
+ "path"
"syscall"
+
+ "github.com/pkg/errors"
)
// StringSliceContains --
@@ -72,3 +75,26 @@ func WaitForSignal(sig chan os.Signal, exit func(int)) {
exit(1)
}()
}
+
+// WriteFileWithContent --
+func WriteFileWithContent(buildDir string, relativePath string, content
string) error {
+ filePath := path.Join(buildDir, relativePath)
+ fileDir := path.Dir(filePath)
+ // Create dir if not present
+ err := os.MkdirAll(fileDir, 0777)
+ if err != nil {
+ return errors.Wrap(err, "could not create dir for file
"+relativePath)
+ }
+ // Create file
+ file, err := os.Create(filePath)
+ if err != nil {
+ return errors.Wrap(err, "could not create file "+relativePath)
+ }
+ defer file.Close()
+
+ _, err = file.WriteString(content)
+ if err != nil {
+ errors.Wrap(err, "could not write to file "+relativePath)
+ }
+ return nil
+}
diff --git a/test/build_manager_integration_test.go
b/test/build_manager_integration_test.go
index b7124f2..63fcc12 100644
--- a/test/build_manager_integration_test.go
+++ b/test/build_manager_integration_test.go
@@ -23,87 +23,87 @@ package test
import (
"context"
- "github.com/apache/camel-k/pkg/build/assemble"
- "github.com/apache/camel-k/pkg/build/packager"
- "github.com/apache/camel-k/pkg/build/publish"
"testing"
"time"
- "github.com/apache/camel-k/pkg/build"
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+ "github.com/apache/camel-k/pkg/builder"
+ "github.com/apache/camel-k/pkg/builder/s2i"
"github.com/apache/camel-k/pkg/util/digest"
+
"github.com/stretchr/testify/assert"
)
func TestBuildManagerBuild(t *testing.T) {
ctx := context.TODO()
namespace := getTargetNamespace()
- assembler := assemble.NewMavenAssembler(ctx)
- pack := packager.NewJavaStandardPackager(ctx)
- publisher := publish.NewS2IPublisher(ctx, namespace)
- buildManager := build.NewManager(ctx, assembler, pack, publisher)
- identifier := build.Identifier{
- Name: "man-test",
- Qualifier: digest.Random(),
- }
- buildManager.Start(build.Request{
- Identifier: identifier,
- Code: build.Source{
+ b := builder.New(ctx, namespace)
+
+ r := builder.Request{
+ Identifier: builder.Identifier{
+ Name: "man-test",
+ Qualifier: digest.Random(),
+ },
+ Code: v1alpha1.SourceSpec{
Content: createTimerToLogIntegrationCode(),
},
Dependencies: []string{
"mvn:org.apache.camel/camel-core",
"camel:telegram",
},
- })
+ Steps: s2i.DefaultSteps,
+ }
+
+ b.Submit(r)
deadline := time.Now().Add(5 * time.Minute)
- var result build.Result
+ var result builder.Result
+
for time.Now().Before(deadline) {
- result = buildManager.Get(identifier)
- if result.Status == build.StatusCompleted || result.Status ==
build.StatusError {
+ result = b.Submit(r)
+ if result.Status == builder.StatusCompleted || result.Status ==
builder.StatusError {
break
}
time.Sleep(2 * time.Second)
}
- assert.NotEqual(t, build.StatusError, result.Status)
- assert.Equal(t, build.StatusCompleted, result.Status)
+ assert.NotEqual(t, builder.StatusError, result.Status)
+ assert.Equal(t, builder.StatusCompleted, result.Status)
assert.Regexp(t, ".*/.*/.*:.*", result.Image)
}
func TestBuildManagerFailedBuild(t *testing.T) {
-
ctx := context.TODO()
namespace := getTargetNamespace()
- assembler := assemble.NewMavenAssembler(ctx)
- pack := packager.NewJavaStandardPackager(ctx)
- publisher := publish.NewS2IPublisher(ctx, namespace)
- buildManager := build.NewManager(ctx, assembler, pack, publisher)
- identifier := build.Identifier{
- Name: "man-test-2",
- Qualifier: digest.Random(),
- }
- buildManager.Start(build.Request{
- Identifier: identifier,
- Code: build.Source{
+ b := builder.New(ctx, namespace)
+
+ r := builder.Request{
+ Identifier: builder.Identifier{
+ Name: "man-test",
+ Qualifier: digest.Random(),
+ },
+ Code: v1alpha1.SourceSpec{
Content: createTimerToLogIntegrationCode(),
},
Dependencies: []string{
"mvn:org.apache.camel/camel-cippalippa",
},
- })
+ Steps: s2i.DefaultSteps,
+ }
+
+ b.Submit(r)
deadline := time.Now().Add(5 * time.Minute)
- var result build.Result
+ var result builder.Result
for time.Now().Before(deadline) {
- result = buildManager.Get(identifier)
- if result.Status == build.StatusCompleted || result.Status ==
build.StatusError {
+ result = b.Submit(r)
+ if result.Status == builder.StatusCompleted || result.Status ==
builder.StatusError {
break
}
time.Sleep(2 * time.Second)
}
- assert.Equal(t, build.StatusError, result.Status)
- assert.NotEqual(t, build.StatusCompleted, result.Status)
+ assert.Equal(t, builder.StatusError, result.Status)
+ assert.NotEqual(t, builder.StatusCompleted, result.Status)
assert.Empty(t, result.Image)
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services