diff --git a/ci/.gitattributes b/.dagger/.gitattributes similarity index 100% rename from ci/.gitattributes rename to .dagger/.gitattributes diff --git a/ci/.gitignore b/.dagger/.gitignore similarity index 100% rename from ci/.gitignore rename to .dagger/.gitignore diff --git a/ci/README.md b/.dagger/README.md similarity index 87% rename from ci/README.md rename to .dagger/README.md index 42b31de3..329d123b 100644 --- a/ci/README.md +++ b/.dagger/README.md @@ -10,19 +10,19 @@ This dagger module is used to define the CI for the docs, widget sites. Build the docs and widget sites using the following command. ```bash -dagger call --source=.:default build export --path=./build +dagger call build export --path=./build ``` ### Run the docs site locally Run the docs site locally using the following command. ```bash -dagger call --source=.:default server-docs up --ports=8080:80 +dagger call server-docs up --ports=8080:80 ``` ### Build docker image and push to ECR repo ```bash -dagger call --source=. publish \ +dagger call publish \ --sites="docs" \ --aws-region=ap-southeast-1 \ --aws-access-key-id=env:AWS_ACCESS_KEY_ID \ @@ -40,7 +40,7 @@ dagger call --source=. publish \ Build the docs site and deploy to S3. This is for CI deployment. ```bash -dagger call --source=. release \ +dagger call release \ --sites="docs" \ --aws-region= \ --aws-access-key-id=env:AWS_ACCESS_KEY_ID \ diff --git a/ci/aws.go b/.dagger/aws.go similarity index 76% rename from ci/aws.go rename to .dagger/aws.go index 0600572c..72791637 100644 --- a/ci/aws.go +++ b/.dagger/aws.go @@ -2,13 +2,14 @@ package main import ( "context" + "dagger/ci/internal/dagger" ) type AWS struct { Ci *Ci // +private } -func (m *AWS) AwsCli(ctx context.Context, awsAccessKeyID, awsSecretAccessKey, awsSessionToken *Secret, awsRegion string) (*Container, error) { +func (m *AWS) AwsCli(ctx context.Context, awsAccessKeyID, awsSecretAccessKey, awsSessionToken *dagger.Secret, awsRegion string) (*dagger.Container, error) { ctr := dag.Container(). From("public.ecr.aws/aws-cli/aws-cli:latest"). WithSecretVariable("AWS_ACCESS_KEY_ID", awsAccessKeyID). @@ -24,11 +25,11 @@ func (m *AWS) EcrGetLoginPassword( ctx context.Context, // +optional - awsAccessKeyID *Secret, + awsAccessKeyID *dagger.Secret, // +optional - awsSecretAccessKey *Secret, + awsSecretAccessKey *dagger.Secret, // +optional - awsSessionToken *Secret, + awsSessionToken *dagger.Secret, // +optional awsRegion string, ) (string, error) { @@ -38,6 +39,6 @@ func (m *AWS) EcrGetLoginPassword( } return ctr. - WithExec([]string{"--region", awsRegion, "ecr", "get-login-password"}). + WithExec([]string{"aws", "--region", awsRegion, "ecr", "get-login-password"}). Stdout(ctx) } diff --git a/.dagger/go.mod b/.dagger/go.mod new file mode 100644 index 00000000..16b90189 --- /dev/null +++ b/.dagger/go.mod @@ -0,0 +1,48 @@ +module dagger/ci + +go 1.22.2 + +require ( + github.com/99designs/gqlgen v0.17.49 + github.com/Khan/genqlient v0.7.0 + github.com/vektah/gqlparser/v2 v2.5.16 + go.opentelemetry.io/otel v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 + go.opentelemetry.io/otel/sdk v1.27.0 + go.opentelemetry.io/otel/trace v1.27.0 + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa + golang.org/x/sync v0.7.0 + google.golang.org/grpc v1.64.0 +) + +require ( + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/sosodev/duration v1.3.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect + go.opentelemetry.io/otel/log v0.3.0 + go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.3.0 + go.opentelemetry.io/proto/otlp v1.3.1 + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect + google.golang.org/protobuf v1.34.1 // indirect +) + +replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 + +replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 + +replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.3.0 + +replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.3.0 diff --git a/ci/go.sum b/.dagger/go.sum similarity index 61% rename from ci/go.sum rename to .dagger/go.sum index 3c614bc0..6fea81b9 100644 --- a/ci/go.sum +++ b/.dagger/go.sum @@ -1,5 +1,5 @@ -github.com/99designs/gqlgen v0.17.44 h1:OS2wLk/67Y+vXM75XHbwRnNYJcbuJd4OBL76RX3NQQA= -github.com/99designs/gqlgen v0.17.44/go.mod h1:UTCu3xpK2mLI5qcMNw+HKDiEL77it/1XtAjisC4sLwM= +github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= +github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= @@ -27,52 +27,52 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/sosodev/duration v1.2.0 h1:pqK/FLSjsAADWY74SyWDCjOcd5l7H8GSnnOGEB9A1Us= -github.com/sosodev/duration v1.2.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= +github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= +github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= -github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= +github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha h1:z2s6Zba+OUyayRv5m1AXWNUTGh57K1iMhy6emU5QT5Y= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha/go.mod h1:paOXXyUgPW6jYxYkP0pB47H2zHE1fPvMJ4E4G9LHOi0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= -go.opentelemetry.io/otel/log v0.2.0-alpha h1:ixOPvMzserpqA07SENHvRzkZOsnG0XbPr74hv1AQ+n0= -go.opentelemetry.io/otel/log v0.2.0-alpha/go.mod h1:vbFZc65yq4c4ssvXY43y/nIqkNJLxORrqw0L85P59LA= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= -go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= -go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= -go.opentelemetry.io/otel/sdk/log v0.2.0-alpha h1:jGTkL/jroJ31jnP6jDl34N/mDOfRGGYZHcHsCM+5kWA= -go.opentelemetry.io/otel/sdk/log v0.2.0-alpha/go.mod h1:Hd8Lw9FPGUM3pfY7iGMRvFaC2Nyau4Ajb5WnQ9OdIho= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= -go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= -go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= +go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= +go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= +go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= +go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= +go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 h1:4HZJ3Xv1cmrJ+0aFo304Zn79ur1HMxptAE7aCPNLSqc= -google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= +google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= diff --git a/ci/main.go b/.dagger/main.go similarity index 84% rename from ci/main.go rename to .dagger/main.go index 9ff829bb..fe396ce2 100644 --- a/ci/main.go +++ b/.dagger/main.go @@ -11,20 +11,22 @@ import ( type Ci struct { // +private - Source *Directory + Source *dagger.Directory } func New( // Project source directory. // +optional - source *Directory, + // +defaultPath="/" + // +ignore=[".git", "**/node_modules"] + source *dagger.Directory, // Checkout the repository (at the designated ref) and use it as the source directory instead of the local one. // +optional ref string, ) (*Ci, error) { if source == nil && ref != "" { - source = dag.Git("https://github.com/kobiton/docs.git", GitOpts{ + source = dag.Git("https://github.com/kobiton/docs.git", dagger.GitOpts{ KeepGitDir: true, }).Ref(ref).Tree() } @@ -44,17 +46,17 @@ const ( ) // Build the project -func (m *Ci) Build() (*Directory, error) { +func (m *Ci) Build() (*dagger.Directory, error) { var eg errgroup.Group - var docs *Directory + var docs *dagger.Directory eg.Go(func() error { docs = m.nodeJsBase(). WithExec([]string{"yarn", "build-docs"}). Directory("/app/build/docs") return nil }) - var widget *Directory + var widget *dagger.Directory eg.Go(func() error { widget = m.nodeJsBase(). WithExec([]string{"yarn", "build-widget"}). @@ -75,7 +77,7 @@ func (m *Ci) Build() (*Directory, error) { func (m *Ci) Server( // Site to build site string, -) *Container { +) *dagger.Container { dir, _ := m.Build() path := fmt.Sprintf("/%s", site) @@ -94,7 +96,7 @@ func (m *Ci) Server( WithExposedPort(80) } -func (m *Ci) ServerDocs() *Service { +func (m *Ci) ServerDocs() *dagger.Service { return m.Server("docs"). WithExec([]string{"sh", "-c", "/bin/bash /docs/replace-env-vars.sh /docs && nginx -g 'daemon off;'"}). AsService() @@ -106,13 +108,13 @@ func (m *Ci) Publish( // AWS Access Key ID // +optional - awsAccessKeyID *Secret, + awsAccessKeyID *dagger.Secret, // AWS Secret Access Key // +optional - awsSecretAccessKey *Secret, + awsSecretAccessKey *dagger.Secret, // AWS Session Token // +optional - awsSessionToken *Secret, + awsSessionToken *dagger.Secret, // +optional // AWS Region awsRegion string, @@ -165,13 +167,13 @@ func (m *Ci) Release( // AWS Access Key ID // +optional - awsAccessKeyID *Secret, + awsAccessKeyID *dagger.Secret, // AWS Secret Access Key // +optional - awsSecretAccessKey *Secret, + awsSecretAccessKey *dagger.Secret, // AWS Session Token // +optional - awsSessionToken *Secret, + awsSessionToken *dagger.Secret, // +optional // AWS Region awsRegion string, @@ -193,20 +195,20 @@ func (m *Ci) Release( eg.Go(func() error { _, err = ctr.WithDirectory("/app", dir.Directory(fmt.Sprintf("/%s", site))). - WithExec([]string{"s3", "sync", "/app", fmt.Sprintf("s3://%s.kobiton.com", site)}). - WithExec([]string{"cloudfront", "create-invalidation", "--distribution-id", cloudfrontID, "--paths", "/*"}).Stdout(ctx) + WithExec([]string{"aws", "s3", "sync", "/app", fmt.Sprintf("s3://%s.kobiton.com", site)}). + WithExec([]string{"aws", "cloudfront", "create-invalidation", "--distribution-id", cloudfrontID, "--paths", "/*"}).Stdout(ctx) return err }) return eg.Wait() } -func (m Ci) nodeJsBase() *Container { +func (m Ci) nodeJsBase() *dagger.Container { // Use the LTS version by default return m.nodeJsBaseFromVersion(nodeVersionLTS) } -func (m Ci) nodeJsBaseFromVersion(nodeVersion string) *Container { +func (m Ci) nodeJsBaseFromVersion(nodeVersion string) *dagger.Container { appDir := "app" src := m.Source @@ -220,6 +222,7 @@ func (m Ci) nodeJsBaseFromVersion(nodeVersion string) *Container { WithoutEntrypoint(). WithWorkdir(mountPath). WithMountedCache("/usr/local/share/.cache/yarn", dag.CacheVolume(fmt.Sprintf("yarn_cache:%s", nodeVersion))). + WithMountedCache("/app/node_modules", dag.CacheVolume("node_modules_cache")). WithFile(fmt.Sprintf("%s/package.json", mountPath), src.File("package.json")). // WithFile(fmt.Sprintf("%s/yarn.lock", mountPath), src.File("yarn.lock")). WithExec([]string{"apk", "add", "bash"}). diff --git a/.github/actions/call/action.yaml b/.github/actions/call/action.yaml index a29b136f..a941aeb6 100644 --- a/.github/actions/call/action.yaml +++ b/.github/actions/call/action.yaml @@ -26,10 +26,10 @@ runs: role-to-assume: arn:aws:iam::${{ inputs.aws-account-id }}:role/github-action-role aws-region: ${{ inputs.aws-region }} - - name: Release-docs - uses: dagger/dagger-for-github@v5 + - name: Release-docs + uses: dagger/dagger-for-github@e49f5bfe7f9a3593f38b9d7391f110d6dff48f94 # v6.8.0 with: - version: "0.11.8" + version: "0.13.0" verb: call module: github.com/${{ github.repository }}@${{ github.ref }} args: | diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cbd2b975..b873059b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -28,9 +28,9 @@ jobs: run: echo "IMAGE_TAG=`echo ${{ github.sha }} | cut -c1-7`" >> $GITHUB_ENV - name: Build - uses: dagger/dagger-for-github@v5 + uses: dagger/dagger-for-github@e49f5bfe7f9a3593f38b9d7391f110d6dff48f94 # v6.8.0 with: - version: "0.11.8" + version: "0.13.0" verb: call module: github.com/${{ github.repository }}@${{ github.ref }} args: | diff --git a/.github/workflows/test_build.yaml b/.github/workflows/test_build.yaml index 3dec0624..9c54e122 100644 --- a/.github/workflows/test_build.yaml +++ b/.github/workflows/test_build.yaml @@ -20,9 +20,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Build - uses: dagger/dagger-for-github@v5 + uses: dagger/dagger-for-github@e49f5bfe7f9a3593f38b9d7391f110d6dff48f94 # v6.8.0 with: - version: "0.11.8" + version: "0.13.0" module: github.com/${{ github.repository }}@${{ github.ref }} verb: call args: --ref ${{ github.ref }} build diff --git a/ci/LICENSE b/ci/LICENSE deleted file mode 100644 index 137069b8..00000000 --- a/ci/LICENSE +++ /dev/null @@ -1,73 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/ci/go.mod b/ci/go.mod deleted file mode 100644 index 3904bcaa..00000000 --- a/ci/go.mod +++ /dev/null @@ -1,40 +0,0 @@ -module dagger/ci - -go 1.22.2 - -require ( - github.com/99designs/gqlgen v0.17.44 - github.com/Khan/genqlient v0.7.0 - github.com/vektah/gqlparser/v2 v2.5.11 - go.opentelemetry.io/otel v1.26.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 - go.opentelemetry.io/otel/sdk v1.26.0 - go.opentelemetry.io/otel/trace v1.26.0 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa - golang.org/x/sync v0.7.0 - google.golang.org/grpc v1.64.0 -) - -require ( - github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect - github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect - github.com/sosodev/duration v1.2.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.2.0-alpha - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect - go.opentelemetry.io/otel/log v0.2.0-alpha - go.opentelemetry.io/otel/metric v1.26.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.2.0-alpha - go.opentelemetry.io/proto/otlp v1.2.0 - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/protobuf v1.34.1 // indirect -) diff --git a/dagger.json b/dagger.json index 53a5ece4..fc0bf570 100644 --- a/dagger.json +++ b/dagger.json @@ -1,15 +1,6 @@ { "name": "ci", "sdk": "go", - "source": "ci", - "engineVersion": "v0.11.8", - "views": [ - { - "name": "default", - "patterns": [ - "!.git", - "!**/node_modules" - ] - } - ] + "source": ".dagger", + "engineVersion": "v0.13.0" } diff --git a/docs/modules/automation-testing/pages/basic-appium-server/launch-a-basic-appium-2-session.adoc b/docs/modules/automation-testing/pages/basic-appium-server/launch-a-basic-appium-2-session.adoc index bc4cbbfe..4eb17fa8 100644 --- a/docs/modules/automation-testing/pages/basic-appium-server/launch-a-basic-appium-2-session.adoc +++ b/docs/modules/automation-testing/pages/basic-appium-server/launch-a-basic-appium-2-session.adoc @@ -32,6 +32,9 @@ With https://appium.io/docs/en/2.1/guides/migrating-1-to-2/[Appium 2], vendor pr For non-standard capabilities, unless there are specific instructions from Kobiton to use the `kobiton:` vendor prefix, add `appium:` prefix to all of them. +[IMPORTANT] +For `'app'`, use `'kobiton:app'` instead of `'appium:app'`. + === Example Below is a sample list of capabilities that can be used on a Xium session: @@ -67,14 +70,14 @@ const desiredCaps = { 'appium:automationName': 'XCUITest', 'appium:bundleId': 'com.example.ToDoApp', 'appium:deviceOrientation': 'portrait', - 'appium:sessionName': 'Automation iOS Hybrid App', - 'appium:sessionDescription': 'Automation session', + 'kobiton:sessionName': 'Automation iOS Hybrid App', + 'kobiton:sessionDescription': 'Automation session', 'appium:noReset': true, 'appium:fullReset': false, 'appium:captureScreenshots': true, 'appium:networkActivity': false, - 'appium:app': 'kobiton-store:v657531', - 'appium:deviceGroup': 'ORGANIZATION', + 'kobiton:app': 'kobiton-store:v657531', + 'kobiton:deviceGroup': 'ORGANIZATION', 'appium:deviceName': '*', 'appium:udid': 'aa2ace81ea5b7e6164965b97c5bf432432', 'platformName': 'iOS' @@ -85,12 +88,20 @@ Once these changes are made, your script is ready to run basic Appium 2 sessions == Notes/Limitations -* Android testing with basic Appium 2 is only available for Ubuntu GEM or Standard mode; iOS can be tested with Ubuntu GEM, nixOS GEM, and Standard mode. -* No session exhaust is available, which means there are no screenshots, device logs, Appium logs, system metrics at this time. When reviewing sessions, only Session Overview has content; Session Explorer is not available. -* Session video is available. -* Mixed sessions are available, but manual interactions in those sessions are not supported. +* Limited session exhaust is available, which means there are no device logs, device metrics, Appium inspector data, and network payload capture data at this time. + +[NOTE] +==== + +Although there is a device logs file downloadable from the Overview page of a basic Appium session, the file only contains logs before the basic Appium script started. + +==== + +include::automation-testing:partial$mixed-sessions-basic-appium-limitations.adoc[] + * AI features - including Scriptless, generate Appium script, validations, and flexCorrect - are not supported for basic Appium 2 sessions as they rely heavily on exhaust. -* Devices with passcodes are not currently supported with basic Appium 2. + +* Basic Appium 2 script does not support iOS 15 and later devices with passcode enabled. == Additional notes diff --git a/docs/modules/automation-testing/pages/basic-appium-server/launch-an-appium-flutter-driver-session.adoc b/docs/modules/automation-testing/pages/basic-appium-server/launch-an-appium-flutter-driver-session.adoc index 33774a31..94d58063 100644 --- a/docs/modules/automation-testing/pages/basic-appium-server/launch-an-appium-flutter-driver-session.adoc +++ b/docs/modules/automation-testing/pages/basic-appium-server/launch-an-appium-flutter-driver-session.adoc @@ -131,29 +131,30 @@ The Appium Flutter driver is supported only via our basic Appium 2 server functi Then, change the value of `'appium:automationName'` to `'Flutter'` to use the Appium Flutter driver. -Example iOS capabilities: +Example Android capabilities: [source,javascript] ---- const capabilities = { -'platformName': 'iOS', -'appium:autoAcceptAlerts': true, -'appium:app': 'https://kobiton-us-east.s3.amazonaws.com/.../flutter_app.ipa', -'appium:udid': '00008020-0004***41123402E', + 'platformName':'Android' + 'kobiton:app': 'https://kobiton-us-east.s3.amazonaws.com/.../flutter_app.apk', + 'appium:udid': '39201F****01XV', 'appium:automationName': 'Flutter', // -> required to use Appium Flutter Driver 'kobiton:runtime':'appium', // -> required to use Basic Appium Server } ---- -Example Android capabilities: + +Example iOS capabilities: [source,javascript] ---- const capabilities = { - 'platformName':'Android' - 'appium:app': 'https://kobiton-us-east.s3.amazonaws.com/.../flutter_app.apk', - 'appium:udid': '39201F****01XV', +'platformName': 'iOS', +'appium:autoAcceptAlerts': true, +'kobiton:app': 'https://kobiton-us-east.s3.amazonaws.com/.../flutter_app.ipa', +'appium:udid': '00008020-0004***41123402E', 'appium:automationName': 'Flutter', // -> required to use Appium Flutter Driver 'kobiton:runtime':'appium', // -> required to use Basic Appium Server @@ -165,4 +166,4 @@ Run the script to start the Appium Flutter driver automation session. == Limitations * All limitations for Appium Server session apply (see xref:basic-appium-server/launch-a-basic-appium-2-session.adoc#_known_issueslimitations[here]). -* Only Android devices hosted in Standard mode are supported at this time. \ No newline at end of file +* Only Android devices hosted in Standard mode are supported at this time. diff --git a/docs/modules/automation-testing/pages/start-a-mixed-session.adoc b/docs/modules/automation-testing/pages/start-a-mixed-session.adoc index 6ee3d345..9ae351d9 100644 --- a/docs/modules/automation-testing/pages/start-a-mixed-session.adoc +++ b/docs/modules/automation-testing/pages/start-a-mixed-session.adoc @@ -59,9 +59,9 @@ Now you can view your script running on the device and fix issues in realtime. * In a mixed session, both the Manual and Automation session must be initiated by the same user. -* Mixed sessions can only be initiated with Appium or Basic Appium 2 automation tests; other automation frameworks, e.g. Espresso, XCUITest, are not currently supported. +* Mixed sessions can only be initiated with Appium or basic Appium 2 automation tests; other automation frameworks, e.g. Espresso, XCUITest, are not currently supported. -* Performing manual actions in a mixed session is not supported for Basic Appium 2 script execution. +include::automation-testing:partial$mixed-sessions-basic-appium-limitations.adoc[] * Session Explorer is not available for Mixed Sessions; i.e. it's not possible to view detailed steps and screenshots for Mixed Sessions. diff --git a/docs/modules/automation-testing/partials/mixed-sessions-basic-appium-limitations.adoc b/docs/modules/automation-testing/partials/mixed-sessions-basic-appium-limitations.adoc new file mode 100644 index 00000000..d2f5aad6 --- /dev/null +++ b/docs/modules/automation-testing/partials/mixed-sessions-basic-appium-limitations.adoc @@ -0,0 +1,5 @@ +* Mixed sessions have the following limitations while a basic Appium 2 script is running: + +** Manual interactions with the device are not available for Android devices. + +** On Lightning mode devices, live video is not available *when Lightning mode is off*. diff --git a/docs/modules/release-notes/nav.adoc b/docs/modules/release-notes/nav.adoc index 1de6f1b9..a8aca404 100644 --- a/docs/modules/release-notes/nav.adoc +++ b/docs/modules/release-notes/nav.adoc @@ -6,6 +6,8 @@ * All releases +** xref:all-releases/4_15S.adoc[] +** xref:all-releases/4_15.adoc[] ** xref:all-releases/4_14.adoc[] ** xref:all-releases/4_13_3S.adoc[] ** xref:all-releases/4_13_2S.adoc[] diff --git a/docs/modules/release-notes/pages/all-releases/1_1.adoc b/docs/modules/release-notes/pages/all-releases/1_1.adoc index 475ace8a..c0d29f9e 100644 --- a/docs/modules/release-notes/pages/all-releases/1_1.adoc +++ b/docs/modules/release-notes/pages/all-releases/1_1.adoc @@ -22,7 +22,7 @@ _May 30, 2017_ * Ability to display session in user-configured timezone * Kobiton Desktop App now shows detailed steps when initializing devices -* Documented the https://support.kobiton.com/faq/local-testing-vpn[whitelist approach] for app testing behind the firewall +* Documented the whitelist approach for app testing behind the firewall * Many bug fixes == Customers update diff --git a/docs/modules/release-notes/pages/all-releases/1_3.adoc b/docs/modules/release-notes/pages/all-releases/1_3.adoc index 7c8b1188..55004da2 100644 --- a/docs/modules/release-notes/pages/all-releases/1_3.adoc +++ b/docs/modules/release-notes/pages/all-releases/1_3.adoc @@ -16,14 +16,14 @@ We also support plan upgrading for paid users: === Manual Test Enhancements -* Support iOS 11 Beta on https://support.kobiton.com/devices-list/[these devices] +* Support iOS 11 Beta * Support video player in the Session Details page * Support changing device timezone for Android * Support changing device location for IOS === Automation Test Enhancements -* https://support.kobiton.com/automation-testing/get-Kobiton-session-id/[Retrieve Kobiton Session ID] through 02 requests `GET /session/:sessionId` and `POST /session` +* Retrieve Kobiton Session ID through these requests `GET /session/:sessionId` and `POST /session` * Finish a test session immediately after `DELETE /session/:sessionId` instead of waiting for device cleanup === API Enhancements diff --git a/docs/modules/release-notes/pages/all-releases/1_4.adoc b/docs/modules/release-notes/pages/all-releases/1_4.adoc index 834becb1..b914f817 100644 --- a/docs/modules/release-notes/pages/all-releases/1_4.adoc +++ b/docs/modules/release-notes/pages/all-releases/1_4.adoc @@ -5,10 +5,6 @@ _October 09, 2017_ == Improvements -=== More Devices - -* We've added 150 new devices! See list of https://support.kobiton.com/devices-list[all device models]. - === Manual Test * Improve gestures: scroll and zoom with mouse or trackpad diff --git a/docs/modules/release-notes/pages/all-releases/2_0_2.adoc b/docs/modules/release-notes/pages/all-releases/2_0_2.adoc index 25c3353d..724e8365 100644 --- a/docs/modules/release-notes/pages/all-releases/2_0_2.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_0_2.adoc @@ -7,7 +7,7 @@ _February 12, 2018_ === Manual testing -* Capture and download https://support.kobiton.com/manual-testing/toolbar-features/network-activity-log/[network traffic log (HAR file)] of browser on iOS devices for analyzing performance bottlenecks and security issues. +* Capture and download network traffic log (HAR file) of browser on iOS devices for analyzing performance bottlenecks and security issues. === Security scanning diff --git a/docs/modules/release-notes/pages/all-releases/2_1.adoc b/docs/modules/release-notes/pages/all-releases/2_1.adoc index 927beec6..19a39307 100644 --- a/docs/modules/release-notes/pages/all-releases/2_1.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_1.adoc @@ -13,7 +13,7 @@ _v21 May 07, 2018_ * Always use Chrome v62 on Android devices to solve compatibility issues in Chrome browser and Appium * Support UiAutomator2 test engine on Android device -* Support exact and similar device model matching. Support https://support.kobiton.com/automation-testing/desired-capabilities-usage[special character] asterisk (*) to generalize the capability value on: +* Support exact and similar device model matching. Support special character asterisk (*) to generalize the capability value on: ** deviceName ** platformVersion diff --git a/docs/modules/release-notes/pages/all-releases/2_14.adoc b/docs/modules/release-notes/pages/all-releases/2_14.adoc index c03cd959..579a1045 100644 --- a/docs/modules/release-notes/pages/all-releases/2_14.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_14.adoc @@ -18,7 +18,7 @@ Only available for in-house devices. To enable this feature, mailto:support@kobi * *Bypass the passcode on iOS devices*: Devices or applications that are encountered the passcode for security or any specific testing purpose, Kobiton will help you to automatically input the passcode and continue your test execution. [NOTE] -Worked for both manual & automation—Supported from iOS version 10.x to 13.2.3—required to strictly follow the https://support.kobiton.com/manual-testing/ios-passcode-guidelines/[guidelines] for the setup. +The bypass feature supports both manual and automated tests on iOS devices (versions 10 to 13.2.3) that have passcodes enabled following Kobiton's guidelines. == Enhancements diff --git a/docs/modules/release-notes/pages/all-releases/2_3.adoc b/docs/modules/release-notes/pages/all-releases/2_3.adoc index b938a285..bfeed8bc 100644 --- a/docs/modules/release-notes/pages/all-releases/2_3.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_3.adoc @@ -17,7 +17,7 @@ On Android, if the automationName attribute is empty, Kobiton will set a default == Device Cleanup -* Kobiton now offers users who use Device Lab Management to host / manage their own devices, a flexible method to control a cleanup process. Kobiton’s users are able to include / exclude the https://support.kobiton.com/device-lab-management/device-cleanup-policy/device-cleanup[Cleanup Activities] (refer to the list below) after exiting a manual / automation session: +* Kobiton now offers users who use Device Lab Management to host / manage their own devices, a flexible method to control a cleanup process. Kobiton’s users are able to include / exclude the Cleanup Activities (refer to the list below) after exiting a manual / automation session: ** Remove apps installed within a session ** Remove browser’s cache and browsing history ** Reset device settings (turn on WIFI, USB Debugging, turn off Airplane Mode…) diff --git a/docs/modules/release-notes/pages/all-releases/2_4.adoc b/docs/modules/release-notes/pages/all-releases/2_4.adoc index 1f1f666c..b3358a37 100644 --- a/docs/modules/release-notes/pages/all-releases/2_4.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_4.adoc @@ -5,7 +5,7 @@ _September 17, 2018_ == New features -* *Device Cleanup*: Add https://support.kobiton.com/device-lab-management/device-cleanup-policy/how-to-config-the-cleanup-policy(global-cleanup-policy)["Close Recent App"] policy for both Android and iOS after exiting a manual and automation +* *Device Cleanup*: Add "Close Recent App" policy for both Android and iOS after exiting a manual or automation session. == Enhancements diff --git a/docs/modules/release-notes/pages/all-releases/2_5_1.adoc b/docs/modules/release-notes/pages/all-releases/2_5_1.adoc index 97d322bc..e7269347 100644 --- a/docs/modules/release-notes/pages/all-releases/2_5_1.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_5_1.adoc @@ -8,4 +8,4 @@ _October 08, 2018_ * Implementing the new user interface and logic for the automation testing to adapt the Organization Management feature. Kobiton will automatically set your first assigned group as “Default Group,” which can be manually changed. [NOTE] -Now in the Profile settings, you can select the https://support.kobiton.com/organization-management/automation-for-groups/default-group-setting/[“Default Group”] for the automation testing. “Default Group” is used to check and store the generated automation sessions when you don’t specify the groupID in the desired capabilities. In contrast, with the groupID in https://support.kobiton.com/automation-testing/desired-capabilities-usage/[desired capabilities], your sessions will be generated based on the defined group. +Now in the Profile settings, you can select the “Default Group” for the automation testing. “Default Group” is used to check and store the generated automation sessions when you don’t specify the groupID in the desired capabilities. In contrast, with the groupID in desired capabilities, your sessions will be generated based on the defined group. diff --git a/docs/modules/release-notes/pages/all-releases/2_6.adoc b/docs/modules/release-notes/pages/all-releases/2_6.adoc index b88bfa2d..ed9a885f 100644 --- a/docs/modules/release-notes/pages/all-releases/2_6.adoc +++ b/docs/modules/release-notes/pages/all-releases/2_6.adoc @@ -9,7 +9,7 @@ If the groupID is not provided in the Desired Capabilities: * For picking up a device, Kobiton will get devices from all assigned groups of the user and hosted devices (if any) -* The https://support.kobiton.com/organization-management/automation-for-groups/default-group-setting/[“Default Group”] in the Profile settings will be used to store all the generated automation sessions +* The “Default Group” in the Profile settings will be used to store all the generated automation sessions === REST API diff --git a/docs/modules/release-notes/pages/all-releases/3_0.adoc b/docs/modules/release-notes/pages/all-releases/3_0.adoc index 57dad1d5..7ecd3fb8 100644 --- a/docs/modules/release-notes/pages/all-releases/3_0.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_0.adoc @@ -7,8 +7,6 @@ _January 06, 2020_ We are excited to introduce the new product Intelligent Test Automation (ITA) to heal-up any pain points regarding the automation testing with artificial intelligence (AI). ITA lets you simply perform a manual test execution on one device and being automatically revisited on multiple other devices without any scripting skills required. -https://support.kobiton.com/hc/en-us/articles/360056068271[Explore ITA now] - == Kobiton === New Features diff --git a/docs/modules/release-notes/pages/all-releases/3_1.adoc b/docs/modules/release-notes/pages/all-releases/3_1.adoc index c33e719a..a1452ecd 100644 --- a/docs/modules/release-notes/pages/all-releases/3_1.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_1.adoc @@ -12,16 +12,12 @@ Thanks for using ITA! We know our very first ITA’s version was not so perfect, * Supported the playback with the action Enter key & Delete key on iOS devices * Supported the playback with the action Touch & Swipe on iOS devices -https://support.kobiton.com/hc/en-us/articles/360056068111[Explore ITA now] - == Kobiton === New Features * *Jira integration with Kobiton*: Now you can directly file a bug while you are using Kobiton Portal without switching to another tab. Our integration automatically adds the metadata about the device you are testing on, which might help you easily troubleshoot an issue. -https://support.kobiton.com/hc/en-us/articles/360056066951[Explore the Jira integration now] - === Enhancement * A few of you had trouble logging into our Portal recently. Rest assured, we've resolved the issue. diff --git a/docs/modules/release-notes/pages/all-releases/3_10_1.adoc b/docs/modules/release-notes/pages/all-releases/3_10_1.adoc index fa51dd42..7eb6a7d1 100644 --- a/docs/modules/release-notes/pages/all-releases/3_10_1.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_10_1.adoc @@ -15,8 +15,6 @@ You can now inject the same Visual Assertions from Kobiton Scriptless automation Injecting these assertions is as easy as configuring your Desired capabilities, eliminating the need to script custom assertions, alter your source code, or leverage complex API calls in order to add Visual Testing to your mobile testing strategy. -You can learn more about Visual Assertions https://support.kobiton.com/hc/en-us/articles/360059106831[here]. - == Bug Fixes and Enhancements === Open Appium export diff --git a/docs/modules/release-notes/pages/all-releases/3_11.adoc b/docs/modules/release-notes/pages/all-releases/3_11.adoc index 6c465f2c..d1599b10 100644 --- a/docs/modules/release-notes/pages/all-releases/3_11.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_11.adoc @@ -9,13 +9,13 @@ _April 19, 2021_ * Performance remediation tests now include support for Performance assertions- in addition to the already released crash, visual, and text assertions. NOVA will identify each test step that takes longer than the set baseline time and will identify them on the session explorer. * Data from a scroll wheel gesture is now captured and can be played back and simulated when run against multiple devices. -* Scriptless automation sessions can be https://support.kobiton.com/hc/articles/360060086051[set to run on different device bundles from the Kobiton UI]. This improves automated testing sessions in a few ways: +* Scriptless automation sessions can be set to run on different device bundles from the Kobiton UI. This improves automated testing sessions in a few ways: ** You no longer need to use Kobiton's API to select different bundles to run a session on ** Instead of running a second manual session, just choose a different bundle on the UI's bundle list ** Tests on bundles can be run in parallel * Automation scripts can be set by desired capabilities rather than just being able to run those tests from the the portal -* https://support.kobiton.com/hc/articles/360059922911[Appium Export Script Flow]: there can be a bit of a learning curve when going from manual testing to testing with Appium. Although Kobiton does lesson the curve by exporting an appium script based on a manual session, they were only available when using scriptless automation. Now, users can access those scripts after a manual session and are available on all Scriptless revisit sessions. -* This release introduces the ability to https://support.kobiton.com/hc/articles/360060029671[edit the manual session] meant to be used as the baseline session for NOVA's Scriptless automation runs. This will provide you with more flexibility, allows for the removal of unnecessary or redundant test steps which will give you a much better testing experience. +* Appium Export Script Flow: there can be a bit of a learning curve when going from manual testing to testing with Appium. Although Kobiton does lessen the curve by exporting an appium script based on a manual session, they were only available when using scriptless automation. Now, users can access those scripts after a manual session and are available on all Scriptless revisit sessions. +* This release introduces the ability to edit the manual session meant to be used as the baseline session for NOVA's Scriptless automation runs. This will provide you with more flexibility, allows for the removal of unnecessary or redundant test steps which will give you a much better testing experience. === Script-based Test Automation @@ -30,7 +30,7 @@ Our previous release introduced Visual Assertion to catch visual issues apps may ==== Kobiton Portal -* Kobiton users already have the ability to spoof a device's location, but can now set it by using map markers and search. This eliminates having to look up the exact latitude and longitude of the location you want to spoof. You can learn more https://support.kobiton.com/hc/en-us/articles/360055622512[here]. +* Kobiton users already have the ability to spoof a device's location, but can now set it by using map markers and search. This eliminates having to look up the exact latitude and longitude of the location you want to spoof. * Device list groups can now be changed right on the UI's Group dropdown list. * Users will now see a confirmation popup before deleting a user from an organization with a reminder that once a user is removed you'll need to contact support for that user to be added back into the user base. * While waiting for a device to load on the portal for a manual session, check out our Tips and Tricks panel. In addition to short blurbs that will help keep you up-to-date on Kobiton capabilities, watch out for videos and images to call out Kobiton features. @@ -45,7 +45,6 @@ Our previous release introduced Visual Assertion to catch visual issues apps may ** OnePlus 8 * New Android OS Support! We now support Android 12 Developer Preview. * The device's details modal will now include information on when a device was last utilized. This will help give insight on whether a device was currently in use or if it may be in a hung state and needs to be restarted.   -* We are deprecating docs.kobiton.com, but documentation and support issues can be found and reported on support.kobiton.com ==== REST API diff --git a/docs/modules/release-notes/pages/all-releases/3_2.adoc b/docs/modules/release-notes/pages/all-releases/3_2.adoc index 1012a2c2..38f189e5 100644 --- a/docs/modules/release-notes/pages/all-releases/3_2.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_2.adoc @@ -14,7 +14,7 @@ We are constantly working to improve the ITA usage experience, here’s a summar [NOTE] The virtual keyboard might not work properly on the passcode field on the Android < 7 -* *Crash Remediation*: Now when a crash happens on any executions, ITA will automatically detect and bring-out the specific crash log within the remediation. In this case, ITA provides you with new remediation actions such as Ignore or Report Bug. Click https://support.kobiton.com/ita/remediation/crash-remediation/[here] to learn more. +* *Crash Remediation*: Now when a crash happens on any executions, ITA will automatically detect and bring-out the specific crash log within the remediation. In this case, ITA provides you with new remediation actions such as Ignore or Report Bug. * *Bug fixes*: Fixed many critical bugs that blocked the ITA process, providing the better testing experience. @@ -35,4 +35,3 @@ The virtual keyboard might not work properly on the passcode field on the Androi * Provide the sorting mechanism on the Members List (organization management) * If you have had a problem that cannot change the video quality in the session settings, you should no longer encounter this problem. * Improve the quality of the system for a better testing experience (fix problems with hubs, tcp socket, etc.) -* For Kobiton current supported platforms, you can click https://support.kobiton.com/faq/supported-platforms/[here]. diff --git a/docs/modules/release-notes/pages/all-releases/3_20.adoc b/docs/modules/release-notes/pages/all-releases/3_20.adoc index b5f8f4f7..5e22a89b 100644 --- a/docs/modules/release-notes/pages/all-releases/3_20.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_20.adoc @@ -55,7 +55,7 @@ We've also introduced Configurations in this release. With custom configurations For manual testing, the user selects the custom configuration from the Device card prior to launching a test to see network payload capture information. [NOTE] -Network Payload Capture requires each device to have a certificate installed before using this feature. See https://support.kobiton.com/hc/en-us/articles/360055590932[here] for more information. +Network Payload Capture requires each device to have a certificate installed before using this feature. === Enhancements when installing an app without launching a session diff --git a/docs/modules/release-notes/pages/all-releases/3_21.adoc b/docs/modules/release-notes/pages/all-releases/3_21.adoc index 20f68765..d97802be 100644 --- a/docs/modules/release-notes/pages/all-releases/3_21.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_21.adoc @@ -93,4 +93,4 @@ If a user is using an older browser, our lightning mode functionality may not fu === Introducing virtualUSB (beta) -Developers often connect devices to their development workstations to use their IDE to troubleshoot and debug mobile apps. Sometimes, they don't have physical access to specific devices or OS versions. Testers also may need direct access to devices from an IDE. So, we're introducing virtualUSB, which provides the means to use XCode, Instruments, or iTunes to remotely connect to a real Private or Local device from the Kobiton Portal as if the device were directly connected to the user’s machine. With virtualUSB installed, the user can login with their Kobiton credentials, then connect to device(s) and use them as they were plugged to their machine. Learn more https://support.kobiton.com/hc/en-us/articles/6306031444109-virtualUSB-Beta-version-Install-and-config-guide-on-macOS[here]. +Developers often connect devices to their development workstations to use their IDE to troubleshoot and debug mobile apps. Sometimes, they don't have physical access to specific devices or OS versions. Testers also may need direct access to devices from an IDE. So, we're introducing virtualUSB, which provides the means to use XCode, Instruments, or iTunes to remotely connect to a real Private or Local device from the Kobiton Portal as if the device were directly connected to the user’s machine. With virtualUSB installed, the user can login with their Kobiton credentials, then connect to device(s) and use them as they were plugged to their machine. diff --git a/docs/modules/release-notes/pages/all-releases/3_22.adoc b/docs/modules/release-notes/pages/all-releases/3_22.adoc index 59a58794..7035153a 100644 --- a/docs/modules/release-notes/pages/all-releases/3_22.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_22.adoc @@ -37,4 +37,4 @@ Admins can find this report in the left hand navigation for reports. === Enable validations on scroll action -To date, Kobiton has performed validations such as Text, Text-color, and Visual only on captured screenshots from the Touch action. This enhancement adds the ability to analyze captured screenshots from the scroll action - we will compare the screen before and after the scroll to perform validations. More about validations can be found https://support.kobiton.com/hc/en-us/articles/360056070291-Validation-Remediation-[here]. +To date, Kobiton has performed validations such as Text, Text-color, and Visual only on captured screenshots from the Touch action. This enhancement adds the ability to analyze captured screenshots from the scroll action - we will compare the screen before and after the scroll to perform validations. diff --git a/docs/modules/release-notes/pages/all-releases/3_27.adoc b/docs/modules/release-notes/pages/all-releases/3_27.adoc index c91ecc87..d97aa191 100644 --- a/docs/modules/release-notes/pages/all-releases/3_27.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_27.adoc @@ -30,8 +30,6 @@ API v2 is now available with improved performance and new endpoints. Check out the API v2 documentation site link:https://api.kobiton.com/v2/docs[here]. -A quick introduction on how to navigate and try real API requests in this site, as well as the current API v2 limitations can be found link:https://support.kobiton.com/hc/en-us/articles/6782179234445-API-v2[here]. - link:https://api.kobiton.com/docs/?http#kobiton-api-v1-0[Kobiton API v1] is still available until further notice. We encourage you to start using API v2 as you add new test scripts and processes. For endpoints in API v1 not yet offered in v2, continue to use API v1. We'll continue to enhance API v2 in future releases. diff --git a/docs/modules/release-notes/pages/all-releases/3_28.adoc b/docs/modules/release-notes/pages/all-releases/3_28.adoc index 33bfc211..b2153223 100644 --- a/docs/modules/release-notes/pages/all-releases/3_28.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_28.adoc @@ -26,7 +26,7 @@ We made the following changes: * Included a running session’s log in the response of _Get a session_ endpoint * Added the ability to access both API v1 and API v2 from within the Kobiton Cloud Portal -Check out the API v2 documentation site link:https://api.kobiton.com/v2/docs[here]. A quick introduction on how to navigate and try real API requests in this site, as well as the current API v2 limitations, can be found link:https://support.kobiton.com/hc/en-us/articles/6782179234445-API-v2[here]. +Check out the API v2 documentation site link:https://api.kobiton.com/v2/docs[here]. link:https://api.kobiton.com/docs/?http#kobiton-api-v1-0[Kobiton API v1] is still available until further notice. We encourage you to start using API v2 as you add new test scripts and processes. diff --git a/docs/modules/release-notes/pages/all-releases/3_8_2.adoc b/docs/modules/release-notes/pages/all-releases/3_8_2.adoc index 2664bfa1..49cbc6d1 100644 --- a/docs/modules/release-notes/pages/all-releases/3_8_2.adoc +++ b/docs/modules/release-notes/pages/all-releases/3_8_2.adoc @@ -13,8 +13,6 @@ New IDE plugins are now available for both Android Studio and IntelliJ. These pl * The IntelliJ plugin is in both the JetBrains marketplace and the Visual Studio Code Marketplace and is more accessible. * There is no need to restart the IDE after establishing a session. -To learn more, you can read the https://support.kobiton.com/integration/adb-tunnel-plugin/1-intro[ADB tunnel plugin] documentation. - === Manual canvas iFrame is now generally available The manual canvas iFrame is now out of beta and generally available. With this iFrame, you can make Kobiton manual testing portable by embedding the Manual Canvas into anywhere that supports iFrame. diff --git a/docs/modules/release-notes/pages/all-releases/4_15.adoc b/docs/modules/release-notes/pages/all-releases/4_15.adoc new file mode 100644 index 00000000..8368fc68 --- /dev/null +++ b/docs/modules/release-notes/pages/all-releases/4_15.adoc @@ -0,0 +1,104 @@ += Kobiton 4.15 release notes +:navtitle: Kobiton 4.15 release notes + +_September 14, 2024_ + +== New OS support + +This release adds support for the following: + +* iOS/iPadOS 18 beta 8 +* iOS/iPadOS 18 official + +[WARNING] +MacOS Sequoia 15 is *not supported* and will prevent deviceConnect from working. Do not update Mac mini hosts to MacOS 15. + +[NOTE] +For iOS/IPadOS 18 Beta 8 and 18 official, the cleanup policy does not clear signed in accounts in the Mail app and Safari browser cache. + + + +== Restart a device for users without ADMIN role + +Before this release, only users with the `ADMIN` predefined role could restart a private/local device, and they could only do this from the Device Management page. + +With this release, users with the appropriate permission can restart a device by selecting *Restart* via the *Device List* page. + +[NOTE] +==== + +* Users without ADMIN role must be assigned a custom role with the permission `org_setting.reboot_private_device` to use this feature. + +* Non-admin users with restart permission may only restart devices they can access via their assigned teams. + +* Only devices with *Available* status or *Retained* by the current user can be restarted from the device details. + +==== + +== Option to enable/disable unlimited retention for devices + +This release introduces the option to enable/disable unlimited retention of devices for an org. In *Settings → Other Settings*, we added the checkbox: *Allow unlimited retention*. Check or uncheck this box, then choose *Save* to enable/disable unlimited retention of devices. + +[NOTE] + +==== + +* To access the *Other Settings* page, the user must be assigned a role with the permission `org_setting.modify`. + +* The *Allow unlimited retention* checkbox applies to the whole org. By default, this checkbox is checked. + +==== + +== Script-based Automation: Launch an Appium Server session using the Flutter Integration driver (Beta) + +Previously, we introduced support for launching automation sessions with the Appium Flutter driver. With this release, we've expanded support to include automation sessions using the Appium Flutter Integration driver. + +Before you can start using the Appium Flutter Integration driver, ensure the following prerequisites are met: + +* *Flutter App Preparation*: Pre-process your Flutter app-under-test to enable the Flutter Integration driver extension. This step is crucial for the Appium Flutter Integration driver to interact with your app. + +* *Server Selection*: Run your automation test script using our basic Appium 2.0 server. To do this, set `'kobiton:runtime'` to `'appium'`. Please note that the Appium Flutter Integration driver cannot be used with Xium, Kobiton's default mobile automation method. + +* *Capability Configuration*: Change the value of the capability `'appium:automationName'` to `'FlutterIntegration'`. This tells the Appium server to use the Flutter Integration driver for your test session. + +* *Minimum Appium Java Client version* (for Java - TestNG or JUnit): Appium Java Client 9.3 or later is required for Appium Flutter Integration driver test script. + +Appium Flutter Integration driver is in Beta version with the following limitations: + +* All limitations of our basic Appium 2.0 functionality apply. + +A detailed guide is coming soon! + +== Minor improvements and bug fixes + +This release includes several enhancements and bug fixes to improve your day-to-day testing. + +* Addressed the following Script-based test automation and Device Inspector items: + +** Enable the ability to kick off sequential Xium sessions while in a mixed session. + +** Fixed an issue with running Appium automation using the Appium Selenium WebDriver 5.0.0 or above. + +** Added support for UIAutomator locator when using Appium Inspector. + +** Added support for slider element in Appium Inspector. + +* Addressed the following Scriptless enhancements and bug fixes: + +** Adjust settings for the following flags in a session: `IgnoreUnimportantViews`, `IncludeSystemWindows` + +*** Default setting for manual and Appium automation sessions is `false`. + +*** If a user selects Capture mode in a Manual session, both flags are set to `true`. + +** Some minor improvements and bug fixes. + +* Other items addressed: + +** Added wildcard support to the deviceName query parameter for the get all devices API v2 endpoint. Example: Use `/v2/devices?deviceName=iPad*` to return devices whose name starts with *iPad*. + +** Network Payload Capture: fixed an issue with converting payload files to K6 script with `%%%` in the content. + +** Improve stability of Lightning-mode devices. + +** Improved device battery information reporting in the Device List: temperature, percent charged, battery health, and status. diff --git a/docs/modules/release-notes/pages/all-releases/4_15S.adoc b/docs/modules/release-notes/pages/all-releases/4_15S.adoc new file mode 100644 index 00000000..b7baa87c --- /dev/null +++ b/docs/modules/release-notes/pages/all-releases/4_15S.adoc @@ -0,0 +1,183 @@ += Kobiton 4.15S release notes +:navtitle: Kobiton 4.15S release notes + +_September 27, 2024_ + +== New OS support + +This release adds support for the following: + +* iOS/iPadOS 18 beta 8, 18.1 Beta +* iOS/iPadsOS 18 official +* Xcode 16 Beta +* Xcode 16 official + +[NOTE] +==== + +For iOS/iPadOS 18, the cleanup policy does not currently clear signed-in accounts in the Mail app and Safari browser cache. + +==== + +[WARNING] +==== + +Do not update Mac mini hosts to MacOS Sequoia 15. Kobiton does not currently work with MacOS Sequoia 15 due to an Apple +change that impacted Microsoft .NET. Microsoft is planning a fix in October; we will reassess support then. + +==== + +== SSO: Allow non-SSO login for specific users in SSO Only organizations + +You can now specify users in SSO Only organizations to log in using a username and password instead of SSO. + +In the *SSO Settings*, when *Enforce users to log in to Kobiton only through SSO* is enabled, a new field appears: +*Choose users who are allowed to log in without SSO*. Use this field to search for and select existing users to be able to log in using their Kobiton username and password. + +Designated non-SSO users will be required to use the *Forgot Password* feature the next time they log in to the Portal to set up their username and password login. + +== Indicator for Lightning mode devices in Device List + +Users can easily find devices that support Lightning mode in the Device List by: + +* Selecting *Lightning mode* in the device search bar and choosing *Supported*: + +image:devices:lightning-mode-filter-device-list.png[width=400,alt="The Lightning mode filter options in Device List"] + +* Choosing *List View*, then *Edit Column*, and check *Lightning mode* to see devices with the Lightning icon: + +image:devices:lightning-mode-list-view-column.png[width=250,alt="Show the Lightning mode column in the List View of Device List"] + +image:devices:lightning-mode-indicator-device-list.png[width=1000,alt="The lightning indicator on the device under the list view"] + +== Script-based automation: Obfuscate sensitive data in HTTP headers and Inspector of Session Explorer + +Testers who input sensitive data for automated test cases can use the new custom Appium setting `kobiton:privateMode` to hide the data in *Session Explorer*. + +If a test step or action happens while the value of `kobiton:privateMode` is `true`, the details of it will be hidden in the *View HTTP Headers* and *Appium Inspector* menu of *Session Explorer*. + +For test steps that do not contain private data, change the value of `kobiton:privateMode` back to `false` to stop the obfuscation. + +Below are sample views of obfuscated data in *Session Explorer*: + +* *View HTTP Headers* + +image:automation-testing:session-explorer-obfuscate-private-data-http-headers.png[width=500,alt="The obfuscated data in the View HTTP Headers section"] + +* *Appium Inspector* + +image:automation-testing:session-explorer-obfuscate-private-data-inspector.png[width=500,alt="The obfuscated data in the Appium Inspector section"] + +[NOTE] +==== + +_Limitations/Notes_ + +* Automation sessions that obfuscate data are not marked as sensitive sessions and can be accessed by admins and team members. +* Although private data is obfuscated in *View HTTP Headers* and *Appium Inspector* using the custom setting, it may not be obfuscated in session video, screenshots, and logs. +* Data obfuscation is only available for XIUM and Appium 2 Basic sessions. + +==== + +== Restart a device for users without ADMIN role + +Previously, only users with the *ADMIN* predefined role could restart a private or local device, and this action could only be performed from the *Device Management* page. + +With this release, users with the appropriate permission can restart a device by selecting *Restart* via the *Device List* page. + +[NOTE] +==== + +* Users without ADMIN role must be assigned a custom role with the permission `org_setting.reboot_private_device` to use this feature. +* Non-ADMIN users with the reboot permission may only restart devices they can access via their assigned teams. +* Only devices with *Available* status or *Retained* by the current user can be restarted from the device details. + +==== + +== Option to enable/disable unlimited retention for devices + +This release introduces the option to enable/disable unlimited retention of devices for an org. In *Settings → Other Settings*, we added the checkbox: *Allow unlimited retention*. Check or uncheck this box, then choose *Save* to enable/disable unlimited retention of devices. + +[NOTE] +==== + +* To access the *Other Settings* page, the user must be assigned a role with the `permission org_setting.modify`. +* The *Allow unlimited retention setting* applies to the whole org. By default, this option is `true`. + +==== + +== Monitor number of device offline errors in the last hour + +Device admins can now monitor the number of device offline errors within the last hour. This information is available in the *Error Count (1hr)* column under *Settings → Device Management*. This feature provides real-time insight, enabling quicker identification and resolution of connectivity issues. + +If the number of device offline errors in the past hour exceeds 10, a warning icon will appear next to the error count. This icon indicates that there may be a potential hardware issue with the device. Hover over the warning icon to view suggested actions for resolving the issue. + +[NOTE] +==== + +In addition to hardware issues, certain actions can cause the device to go offline and increase the error count. These actions include restarting services, unplugging and reconnecting the device, or rebooting the Mac mini/Dell server. + +==== + +== Script-based Automation: Launch an Appium Server session using the Flutter Integration driver (Beta) + +Previously, we introduced support for launching automation sessions with the Appium Flutter driver. With this release, we've expanded support to include automation sessions using the Appium Flutter Integration driver. + +Before you can start using the Appium Flutter Integration driver, ensure the following prerequisites are met: + +* *Flutter App Preparation*: Pre-process your Flutter app-under-test to enable the Flutter Integration driver extension. This step is crucial for the Appium Flutter Integration driver to interact with your app. + +* *Server Selection*: Run your automation test script using our basic Appium 2.0 server. To do this, set `'kobiton:runtime'` to `'appium'`. Please note that the Appium Flutter Integration driver cannot be used with Xium, Kobiton's default mobile automation method. + +* *Capability Configuration*: Change the value of the capability `'appium:automationName'` to `'FlutterIntegration'`. This tells the Appium server to use the Flutter Integration driver for your test session. + +* *Minimum Appium Java Client version* (for Java - TestNG or JUnit): Appium Java Client 9.3 or later is required for Appium Flutter Integration driver test script. + +Appium Flutter Integration driver is in Beta version with the following limitations: + +* All limitations of our basic Appium 2.0 functionality apply. + +A detailed guide is coming soon! + +== Minor improvements and bug fixes + +This release includes several enhancements and bug fixes to improve your day-to-day testing. Here are the highlights: + +* Addressed the following Script-based test automation and Device Inspector items: + +** Added support for JSON strings passed as parameters. +** Fixed an issue with uploading test runner to the Portal. +** Fixed a bug that prevents image injection via app instrumentation in Appium. +** Implemented this method: appium:optionalIntentArguments. +** The sendKeys action now works in generated C# Appium scripts. +** Fixed an issue with childSelector in UIAutomator that only returned 1 element when there was a list of elements. +** Enabled the ability to kick off sequential Xium sessions while in a mixed session. +** Fixed an issue with running Appium automation using the Appium Selenium WebDriver 5.0.0 or above. +** Added support for UIAutomator locator when using Appium Inspector. +** Added support for slider element in Appium Inspector. + +* Addressed the following Scriptless enhancements and bug fixes: + +** Adjusted settings for the following flags in a session: `IgnoreUnimportantViews`, `IncludeSystemWindows`. +*** Default setting for manual and Appium automation sessions is `false`. +*** If a user selects Capture mode in a Manual session, both flags are set to `true`. + +* Other items addressed: + +** Videos downloaded from iOS sessions can now be opened by Quicktime and Windows Media Player. +** Exported HAR files (Network Payload Capture) can now be extracted in Windows without downloading 3rd-party apps. +** Fixed devices that were getting stuck in Utilizing due to the following: +*** When multiple devices come online at the same time in organizations with no Cleanup Policy. +*** After restarting services on the GEM or rebooting the GEM. +** Improved FPS (frames per second) in Manual sessions with Standard mode. +** Fixed issue with image injection via app instrumentation for iOS devices. +** Now display the Portal version in the help widget for both Standalone/On-prem and Cloud Portal. +** To better support orgs with MDM passcode requirements, the PIN generator's algorithm has been enhanced to prevent the generation of simple passcodes. +** Fixed an issue with custom cleanup policies not working properly after restarting the device. +** Fixed an issue in the Edit Team page where the validation error does not show when inputting blank or invalid values. +** Fixed an issue that prevents devices from coming online after rebooting the GEM. +** Added wildcard support to the `deviceName` query parameter for the get all devices API v2 endpoint. Example: Use +`/v2/devices?deviceName=iPad*` to return devices whose name starts with iPad. +** Network Payload Capture: fixed an issue with converting payload files with `%%%` in the content. +** Improved stability of Lightning-mode devices. +** Improved device battery information reporting in the Device List: temperature, percent charged, battery health, and status. diff --git a/docs/modules/release-notes/pages/all-releases/4_2.adoc b/docs/modules/release-notes/pages/all-releases/4_2.adoc index f0117537..66f9f10b 100644 --- a/docs/modules/release-notes/pages/all-releases/4_2.adoc +++ b/docs/modules/release-notes/pages/all-releases/4_2.adoc @@ -76,8 +76,8 @@ Kobiton now has guidelines for enrolling Private and Local devices with Intune M _A few considerations:_ -* _If your Intune configuration profile or compliance policy requires a passcode to be set up on devices, *passcode mode 1* must be enabled for your organization. Learn more about passcode modes link:https://support.kobiton.com/hc/en-us/articles/6781014022797-Device-Passcodes[here]._ -* _Using Intune requires that your organization uses a *No Cleanup* policy. Learn more about Cleanup Policies link:https://support.kobiton.com/hc/en-us/articles/360055588272-Device-Cleanup-[here]._ +* _If your Intune configuration profile or compliance policy requires a passcode to be set up on devices, *passcode mode 1* must be enabled for your organization. +* _Using Intune requires that your organization uses a *No Cleanup* policy. Learn more about Cleanup Policies link:https://docs.kobiton.com/devices/create-a-device-cleanup-policy[here]._ == Device Log: Show info logging for iOS devices @@ -94,8 +94,6 @@ API v2 is now available with improved performance and new endpoints. Check out the API v2 documentation site link:https://api.kobiton.com/v2/docs[here]. -A quick introduction on how to navigate and try real API requests in this site, as well as the current API v2 limitations can be found link:https://support.kobiton.com/hc/en-us/articles/6782179234445-API-v2[here]. - link:https://api.kobiton.com/docs/?http#kobiton-api-v1-0[Kobiton API v1] is still available until further notice. We encourage you to start using API v2 as you add new test scripts and processes. For endpoints in API v1 not yet offered in v2, continue to use API v1. We'll continue to enhance API v2 in future releases. diff --git a/docs/modules/release-notes/pages/all-releases/4_3.adoc b/docs/modules/release-notes/pages/all-releases/4_3.adoc index 7289b738..ca6988f3 100644 --- a/docs/modules/release-notes/pages/all-releases/4_3.adoc +++ b/docs/modules/release-notes/pages/all-releases/4_3.adoc @@ -36,7 +36,6 @@ We made the following changes: * Added the ability to access both API v1 and API v2 from within the Kobiton Cloud Portal Check out the API v2 documentation site link:https://api.kobiton.com/v2/docs[here]. -A quick introduction on how to navigate and try real API requests in this site, as well as the current API v2 limitations, can be found link:https://support.kobiton.com/hc/en-us/articles/6782179234445-API-v2[here]. link:https://api.kobiton.com/docs/?http#kobiton-api-v1-0[Kobiton API v1] is still available until further notice. We encourage you to start using API v2 as you add new test scripts and processes. diff --git a/docs/modules/release-notes/pages/all-releases/4_4.adoc b/docs/modules/release-notes/pages/all-releases/4_4.adoc index 9e3c8690..1d774243 100644 --- a/docs/modules/release-notes/pages/all-releases/4_4.adoc +++ b/docs/modules/release-notes/pages/all-releases/4_4.adoc @@ -63,7 +63,7 @@ _NOTE:_ == Accessibility Validation: Touch Target Size on the Ionic Framework -We introduced Touch Target Size validations for hybrid apps in link:https://support.kobiton.com/hc/en-us/articles/13680922974605-v4-2-March-4-2023#accessibility-validations-touch-target-size-and-color-contrast-validations-on-web-and-hybrid-applications-0-7[Release 4.2] with limited support for Ionic Framework. We now leverage the Shadow DOM Inspector feature in link:https://support.kobiton.com/hc/en-us/articles/14465128994445-v4-3-April-1-2023#Kobiton-Inspector:-ability-to-inspect-Shadow-DOM-data[Release 4.3] to bring better support for the Touch Target Size validation for Ionic Framework. +We introduced Touch Target Size validations for hybrid apps in link:https://docs.kobiton.com/release-notes/all-releases/4_2#_accessibility_validations_touch_target_size_and_color_contrast_validations_on_web_and_hybrid_applications[Release 4.2] with limited support for Ionic Framework. We now leverage the Shadow DOM Inspector feature in link:https://docs.kobiton.com/release-notes/all-releases/4_3#_kobiton_inspector_ability_to_inspect_shadow_dom_data[Release 4.3] to bring better support for the Touch Target Size validation for Ionic Framework. _NOTE:_ diff --git a/docs/modules/release-notes/pages/all-releases/4_8.adoc b/docs/modules/release-notes/pages/all-releases/4_8.adoc index f3da1173..c4aa7d24 100644 --- a/docs/modules/release-notes/pages/all-releases/4_8.adoc +++ b/docs/modules/release-notes/pages/all-releases/4_8.adoc @@ -21,8 +21,6 @@ Kobiton 4.8 supports the following: We are excited to introduce our new help documentation site - http://docs.kobiton.com/[docs.kobiton.com] - along with a powerful search widget integrated right within the Portal. This feature allows you to find the information you need quickly and efficiently without leaving the Portal. Keep reading to learn what’s new. -NOTE: We did not migrate content regarding Legacy Kobiton-specific functionality. Rest assured that the https://support.kobiton.com/[support.kobiton.com] site will remain accessible for the time being, ensuring a smooth transition for everyone. - *Refreshed and streamlined help content*: Our commitment to providing you with the best support experience has led to a complete overhaul of our help content. We've refreshed, reorganized, and modernized our documentation to ensure it is in sync with the latest features and improvements introduced in Kobiton 4. *Portal search widget*: We added the ability to search within the Portal help widget, making it easier than ever to find the information you're looking for. No need to navigate away from the Portal to search our extensive documentation. Simply enter your query, and relevant results will appear instantly for you to choose for more detail. Plus, the search results widget is resizable, allowing you to adjust the size. Use the arrow in the bottom right corner to adjust the size. @@ -88,4 +86,4 @@ This release includes a number of bug fixes and enhancements to improve your day ** Fix an issue where space cannot be added to a Team’s name. ** Fix phone number and IMEI not displaying for some devices in the Portal. ** Fix not being able to switch back to the primary tab in Safari in a manual session. -** Fix the behavior of the Add to Favorite button in the Portal. \ No newline at end of file +** Fix the behavior of the Add to Favorite button in the Portal. diff --git a/docs/modules/release-notes/pages/all-releases/4_9_1S.adoc b/docs/modules/release-notes/pages/all-releases/4_9_1S.adoc index e25fecc8..94b3a814 100644 --- a/docs/modules/release-notes/pages/all-releases/4_9_1S.adoc +++ b/docs/modules/release-notes/pages/all-releases/4_9_1S.adoc @@ -23,12 +23,6 @@ We are excited to introduce our new help documentation site along with a powerfu *Refreshed and streamlined help content:* Our commitment to providing you with the best support experience has led to a complete overhaul of our help content. We've refreshed, reorganized, and modernized our documentation to ensure it's in sync with the latest features and improvements introduced in Kobiton 4. -[NOTE] - -==== -We did not migrate content regarding Legacy Kobiton-specific functionality. The http://support.kobiton.com/[support.kobiton.com] site will remain accessible for the time being, ensuring a smooth transition for everyone. -==== - *Portal search widget:* We added the ability to search within the Portal help widget, making it easier than ever to find the information you're looking for. No need to navigate away from the Portal to search our extensive documentation. Simply enter your query, and relevant results will appear instantly for you to choose for more detail. Plus, the search results widget is resizable, allowing you to adjust the size. Use the arrow in the bottom right corner to adjust the size. *Open help in a separate tab:* Want to keep your search results handy while using the Portal? Simply choose the "Help" link to open the search results in a separate tab, so you can refer to them side-by-side. @@ -154,4 +148,4 @@ To expand the available devices, you can try removing or modifying some of the d * Standard mode video does not display rotation correctly. * Jira Cloud integration is Cloud only, so does not work for network configurations without Internet access. There are some known issues - ticket is created, but shows 500 error and cannot add attachments. * Auto-generate Appium script: inputting / into a text field in the baseline session caused the auto-generated script to fail. -* Scriptless may not work properly on Android apps with animation or webviews for Android 13 and below. \ No newline at end of file +* Scriptless may not work properly on Android apps with animation or webviews for Android 13 and below. diff --git a/docs/modules/release-notes/pages/kobiton-four-latest.adoc b/docs/modules/release-notes/pages/kobiton-four-latest.adoc index 37951248..1da118bf 100644 --- a/docs/modules/release-notes/pages/kobiton-four-latest.adoc +++ b/docs/modules/release-notes/pages/kobiton-four-latest.adoc @@ -1,4 +1,4 @@ = Kobiton 4+ latest updates :navtitle: Kobiton 4+ latest updates -include::all-releases/4_14.adoc[leveloffset=1] \ No newline at end of file +include::all-releases/4_15.adoc[leveloffset=1] diff --git a/docs/modules/release-notes/pages/standalone-kobiton-four-latest.adoc b/docs/modules/release-notes/pages/standalone-kobiton-four-latest.adoc index 1caeab62..a875fb4b 100644 --- a/docs/modules/release-notes/pages/standalone-kobiton-four-latest.adoc +++ b/docs/modules/release-notes/pages/standalone-kobiton-four-latest.adoc @@ -1,4 +1,4 @@ = Kobiton 4+ Standalone latest updates :navtitle: Kobiton 4+ Standalone latest updates -include::all-releases/4_13_3S.adoc[leveloffset=1] \ No newline at end of file +include::all-releases/4_15S.adoc[leveloffset=1] diff --git a/docs/modules/supported-platforms/pages/desktop-software.adoc b/docs/modules/supported-platforms/pages/desktop-software.adoc index 74f0b944..c393e7d7 100644 --- a/docs/modules/supported-platforms/pages/desktop-software.adoc +++ b/docs/modules/supported-platforms/pages/desktop-software.adoc @@ -5,6 +5,9 @@ The following desktop software is supported for Kobiton Cloud and Standalone. == Operating systems +[WARNING] +MacOS Sequoia 15 is *not supported* and will prevent deviceConnect from working. Do not update Mac mini hosts to MacOS 15. + [cols="1,1,1"] |=== |Manufacturer|Operating System|Supported version diff --git a/docs/modules/supported-platforms/pages/mobile-operating-systems-and-devices.adoc b/docs/modules/supported-platforms/pages/mobile-operating-systems-and-devices.adoc index 23eb7654..996b8f80 100644 --- a/docs/modules/supported-platforms/pages/mobile-operating-systems-and-devices.adoc +++ b/docs/modules/supported-platforms/pages/mobile-operating-systems-and-devices.adoc @@ -15,10 +15,10 @@ The following mobile devices and operating system (OS) versions are supported on .2+|Apple |iPadOS -|link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14-release-notes[iPadOS 14] through link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_1-release-notes[iPadOS 18.1 Beta] +|link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14-release-notes[iPadOS 14] through link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18-release-notes[iPadOS 18] |iOS -|link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14-release-notes[iOS 14] through link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_1-release-notes[iOS 18.1 Beta] +|link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14-release-notes[iOS 14] through link:https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18-release-notes[iOS 18] |=== ^*1*^ _Lower versions may still work, but are no longer tested._