Skip to content

Commit 653af3e

Browse files
committed
Update tag 4.25.0-20241024 in docs and files
1 parent 7491764 commit 653af3e

27 files changed

+378
-188
lines changed

Diff for: .github/ISSUE_TEMPLATE/bug_report.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ body:
5656
attributes:
5757
label: Docker Selenium version (image tag)
5858
description: What version of Docker Selenium are you using?
59-
placeholder: 4.25.0-20241010? Please use the full tag, avoid "latest"
59+
placeholder: 4.25.0-20241024? Please use the full tag, avoid "latest"
6060
validations:
6161
required: true
6262
- type: input

Diff for: .keda/README.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ The stable implementation will be merged to the upstream KEDA repository frequen
1313
Replace the image registry and tag of these KEDA components with the patched image tag:
1414

1515
```bash
16-
docker pull selenium/keda:2.15.1-selenium-grid-20241010
17-
docker pull selenium/keda-metrics-apiserver:2.15.1-selenium-grid-20241010
18-
docker pull selenium/keda-admission-webhooks:2.15.1-selenium-grid-20241010
16+
docker pull selenium/keda:2.15.1-selenium-grid-20241024
17+
docker pull selenium/keda-metrics-apiserver:2.15.1-selenium-grid-20241024
18+
docker pull selenium/keda-admission-webhooks:2.15.1-selenium-grid-20241024
1919
```
2020

2121
Besides that, you also can use image tag `latest` or `nightly`.
@@ -27,15 +27,15 @@ If you are deploying KEDA core using their official Helm [chart](https://github.
2727
keda:
2828
registry: selenium
2929
repository: keda
30-
tag: "2.15.1-selenium-grid-20241010"
30+
tag: "2.15.1-selenium-grid-20241024"
3131
metricsApiServer:
3232
registry: selenium
3333
repository: keda-metrics-apiserver
34-
tag: "2.15.1-selenium-grid-20241010"
34+
tag: "2.15.1-selenium-grid-20241024"
3535
webhooks:
3636
registry: selenium
3737
repository: keda-admission-webhooks
38-
tag: "2.15.1-selenium-grid-20241010"
38+
tag: "2.15.1-selenium-grid-20241024"
3939
```
4040
4141
If you are deployment Selenium Grid chart with `autoscaling.enabled` is `true` (implies installing KEDA sub-chart), KEDA images registry and tag already set in the `values.yaml`. Refer to list [configuration](../charts/selenium-grid/CONFIGURATION.md).

Diff for: .keda/scalers/selenium-grid-scaler.md

+30-4
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,21 @@ triggers:
2929
3030
**Parameter list:**
3131
32-
- `url` - Graphql url of your Selenium Grid. Refer to the Selenium Grid's documentation [here](https://www.selenium.dev/documentation/en/grid/grid_4/graphql_support/) to for more info.
33-
- `username` - Username for basic authentication in GraphQL endpoint instead of embedding in the URL. (Optional)
34-
- `password` - Password for basic authentication in GraphQL endpoint instead of embedding in the URL. (Optional)
35-
- `browserName` - Name of browser that usually gets passed in the browser capability. Refer to the [Selenium Grid's](https://www.selenium.dev/documentation/en/getting_started_with_webdriver/browsers/) and [WebdriverIO's](https://webdriver.io/docs/options/#capabilities) documentation for more info.
32+
- `url` - Graphql url of your Selenium Grid (Required). Refer to the Selenium Grid's documentation [here](https://www.selenium.dev/documentation/en/grid/grid_4/graphql_support/) to for more info. If endpoint requires authentication, you can use `TriggerAuthentication` to provide the credentials instead of embedding in the URL.
33+
- `browserName` - Name of browser that usually gets passed in the browser capability (Required). Refer to the [Selenium Grid's](https://www.selenium.dev/documentation/en/getting_started_with_webdriver/browsers/) and [WebdriverIO's](https://webdriver.io/docs/options/#capabilities) documentation for more info.
3634
- `sessionBrowserName` - Name of the browser when it is an active session, only set if `BrowserName` changes between the queue and the active session. See the Edge example below for further detail. (Optional)
3735
- `browserVersion` - Version of browser that usually gets passed in the browser capability. Refer to the [Selenium Grid's](https://www.selenium.dev/documentation/en/getting_started_with_webdriver/browsers/) and [WebdriverIO's](https://webdriver.io/docs/options/#capabilities) documentation for more info. (Optional)
3836
- `unsafeSsl` - Skip certificate validation when connecting over HTTPS. (Values: `true`, `false`, Default: `false`, Optional)
3937
- `activationThreshold` - Target value for activating the scaler. Learn more about activation [here](./../concepts/scaling-deployments.md#activating-and-scaling-thresholds). (Default: `0`, Optional)
4038
- `platformName` - Name of the browser platform. Refer to the [Selenium Grid's](https://www.selenium.dev/documentation/en/getting_started_with_webdriver/browsers/) and [WebdriverIO's](https://webdriver.io/docs/options/#capabilities) documentation for more info. (Default: `Linux`, Optional)
4139
- `nodeMaxSessions` - Number of maximum sessions that can run in parallel on a Node. (Default: `1`, Optional). Update this parameter align with node config `--max-sessions` (`SE_NODE_MAX_SESSIONS`) to have the correct scaling behavior.
4240

41+
**Trigger Authentication**
42+
- `username` - Username for basic authentication in GraphQL endpoint instead of embedding in the URL. (Optional)
43+
- `password` - Password for basic authentication in GraphQL endpoint instead of embedding in the URL. (Optional)
44+
- `authType` - Type of authentication to be used. (Optional). This can be set to `Bearer` or `OAuth2` in case Selenium Grid behind an Ingress proxy with other authentication types.
45+
- `accessToken` - Access token (Optional). This is required when `authType` is set a value.
46+
4347
### Example
4448

4549
Here is a full example of scaled object definition using Selenium Grid trigger:
@@ -108,6 +112,28 @@ spec:
108112
sessionBrowserName: 'msedge'
109113
```
110114

115+
In case you want to scale from 0 (`minReplicaCount: 0`), and browser nodes are configured different `--max-sessions` greater than 1, you can set `nodeMaxSessions` for scaler align with number of slots available per node to have the correct scaling behavior.
116+
117+
```yaml
118+
apiVersion: keda.sh/v1alpha1
119+
kind: ScaledObject
120+
metadata:
121+
name: selenium-grid-chrome-scaledobject
122+
namespace: keda
123+
labels:
124+
deploymentName: selenium-chrome-node
125+
spec:
126+
maxReplicaCount: 8
127+
scaleTargetRef:
128+
name: selenium-chrome-node
129+
triggers:
130+
- type: selenium-grid
131+
metadata:
132+
url: 'http://selenium-hub:4444/graphql'
133+
browserName: 'chrome'
134+
nodeMaxSessions: 4
135+
```
136+
111137
If you are supporting multiple versions of browser capability in your Selenium Grid, You should create one scaler for every browser version and pass the `browserVersion` in the metadata.
112138

113139
```yaml

Diff for: .keda/scalers/selenium_grid_scaler_test.go

+164
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,170 @@ func Test_getCountFromSeleniumResponse(t *testing.T) {
15261526
want: 2,
15271527
wantErr: false,
15281528
},
1529+
// Tests from PR: https://github.com/kedacore/keda/pull/6055
1530+
{
1531+
name: "sessions requests with matching browsername and platformName when setSessionsFromHub turned on and node with 1 slots matches should return count as 0",
1532+
args: args{
1533+
b: []byte(`{
1534+
"data": {
1535+
"grid": {
1536+
"sessionCount": 0,
1537+
"maxSession": 1,
1538+
"totalSlots": 1
1539+
},
1540+
"nodesInfo": {
1541+
"nodes": [
1542+
{
1543+
"id": "82ee33bd-390e-4dd6-aee2-06b17ecee18e",
1544+
"status": "UP",
1545+
"sessionCount": 0,
1546+
"maxSession": 1,
1547+
"slotCount": 1,
1548+
"stereotypes":"[{\"slots\":1,\"stereotype\":{\"browserName\":\"chrome\",\"platformName\":\"linux\"}}]",
1549+
"sessions": []
1550+
}
1551+
]
1552+
},
1553+
"sessionsInfo": {
1554+
"sessionQueueRequests": [
1555+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1556+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"Windows 11\"\n}"
1557+
]
1558+
}
1559+
}
1560+
}`),
1561+
browserName: "chrome",
1562+
sessionBrowserName: "chrome",
1563+
browserVersion: "latest",
1564+
platformName: "linux",
1565+
},
1566+
want: 0,
1567+
wantErr: false,
1568+
},
1569+
{
1570+
name: "4 sessions requests with matching browsername and platformName when setSessionsFromHub turned on and node with 2 slots matches should return count as 2",
1571+
args: args{
1572+
b: []byte(`{
1573+
"data": {
1574+
"grid": {
1575+
"sessionCount": 0,
1576+
"maxSession": 2,
1577+
"totalSlots": 2
1578+
},
1579+
"nodesInfo": {
1580+
"nodes": [
1581+
{
1582+
"id": "82ee33bd-390e-4dd6-aee2-06b17ecee18e",
1583+
"status": "UP",
1584+
"sessionCount": 0,
1585+
"maxSession": 2,
1586+
"slotCount": 2,
1587+
"stereotypes":"[{\"slots\":2,\"stereotype\":{\"browserName\":\"chrome\",\"platformName\":\"linux\"}}]",
1588+
"sessions": [
1589+
]
1590+
}
1591+
]
1592+
},
1593+
"sessionsInfo": {
1594+
"sessionQueueRequests": [
1595+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1596+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1597+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1598+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1599+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"Windows 11\"\n}"]
1600+
}
1601+
}
1602+
}`),
1603+
browserName: "chrome",
1604+
sessionBrowserName: "chrome",
1605+
browserVersion: "latest",
1606+
platformName: "linux",
1607+
},
1608+
want: 2,
1609+
wantErr: false,
1610+
},
1611+
{
1612+
name: "4 sessions requests with matching browsername and platformName when setSessionsFromHub turned on, no nodes and sessionsPerNode=2 matches should return count as 2",
1613+
args: args{
1614+
b: []byte(`{
1615+
"data": {
1616+
"grid": {
1617+
"sessionCount": 0,
1618+
"maxSession": 0,
1619+
"totalSlots": 0
1620+
},
1621+
"nodesInfo": {
1622+
"nodes": []
1623+
},
1624+
"sessionsInfo": {
1625+
"sessionQueueRequests": [
1626+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1627+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1628+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1629+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1630+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"Windows 11\"\n}"]
1631+
}
1632+
}
1633+
}`),
1634+
browserName: "chrome",
1635+
sessionBrowserName: "chrome",
1636+
browserVersion: "latest",
1637+
platformName: "linux",
1638+
nodeMaxSessions: 2,
1639+
},
1640+
want: 2,
1641+
wantErr: false,
1642+
},
1643+
{
1644+
name: "sessions requests and active sessions with 1 matching browsername, platformName and sessionBrowserVersion should return count as 1",
1645+
args: args{
1646+
b: []byte(`{
1647+
"data": {
1648+
"grid": {
1649+
"sessionCount": 2,
1650+
"maxSession": 2,
1651+
"totalSlots": 2
1652+
},
1653+
"nodesInfo": {
1654+
"nodes": [
1655+
{
1656+
"id": "d44dcbc5-0b2c-4d5e-abf4-6f6aa5e0983c",
1657+
"status": "UP",
1658+
"sessionCount": 2,
1659+
"maxSession": 2,
1660+
"slotCount": 2,
1661+
"stereotypes":"[{\"slots\":2,\"stereotype\":{\"browserName\":\"chrome\",\"platformName\":\"linux\"}}]",
1662+
"sessions": [
1663+
{
1664+
"id": "0f9c5a941aa4d755a54b84be1f6535b1",
1665+
"capabilities": "{\n \"acceptInsecureCerts\": false,\n \"browserName\": \"chrome\",\n \"browserVersion\": \"91.0.4472.114\",\n \"chrome\": {\n \"chromedriverVersion\": \"91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs\\u002fbranch-heads\\u002f4472@{#1462})\",\n \"userDataDir\": \"\\u002ftmp\\u002f.com.google.Chrome.DMqx9m\"\n },\n \"goog:chromeOptions\": {\n \"debuggerAddress\": \"localhost:35839\"\n },\n \"networkConnectionEnabled\": false,\n \"pageLoadStrategy\": \"normal\",\n \"platformName\": \"linux\",\n \"proxy\": {\n },\n \"se:cdp\": \"http:\\u002f\\u002flocalhost:35839\",\n \"se:cdpVersion\": \"91.0.4472.114\",\n \"se:vncEnabled\": true,\n \"se:vncLocalAddress\": \"ws:\\u002f\\u002flocalhost:7900\\u002fwebsockify\",\n \"setWindowRect\": true,\n \"strictFileInteractability\": false,\n \"timeouts\": {\n \"implicit\": 0,\n \"pageLoad\": 300000,\n \"script\": 30000\n },\n \"unhandledPromptBehavior\": \"dismiss and notify\",\n \"webauthn:extension:largeBlob\": true,\n \"webauthn:virtualAuthenticators\": true\n}",
1666+
"nodeId": "d44dcbc5-0b2c-4d5e-abf4-6f6aa5e0983c"
1667+
},
1668+
{
1669+
"id": "0f9c5a941aa4d755a54b84be1f6535b1",
1670+
"capabilities": "{\n \"acceptInsecureCerts\": false,\n \"browserName\": \"chrome\",\n \"browserVersion\": \"91.0.4472.114\",\n \"chrome\": {\n \"chromedriverVersion\": \"91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs\\u002fbranch-heads\\u002f4472@{#1462})\",\n \"userDataDir\": \"\\u002ftmp\\u002f.com.google.Chrome.DMqx9m\"\n },\n \"goog:chromeOptions\": {\n \"debuggerAddress\": \"localhost:35839\"\n },\n \"networkConnectionEnabled\": false,\n \"pageLoadStrategy\": \"normal\",\n \"platformName\": \"linux\",\n \"proxy\": {\n },\n \"se:cdp\": \"http:\\u002f\\u002flocalhost:35839\",\n \"se:cdpVersion\": \"91.0.4472.114\",\n \"se:vncEnabled\": true,\n \"se:vncLocalAddress\": \"ws:\\u002f\\u002flocalhost:7900\\u002fwebsockify\",\n \"setWindowRect\": true,\n \"strictFileInteractability\": false,\n \"timeouts\": {\n \"implicit\": 0,\n \"pageLoad\": 300000,\n \"script\": 30000\n },\n \"unhandledPromptBehavior\": \"dismiss and notify\",\n \"webauthn:extension:largeBlob\": true,\n \"webauthn:virtualAuthenticators\": true\n}",
1671+
"nodeId": "d44dcbc5-0b2c-4d5e-abf4-6f6aa5e0983c"
1672+
}
1673+
]
1674+
}
1675+
]
1676+
},
1677+
"sessionsInfo": {
1678+
"sessionQueueRequests": [
1679+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"linux\"\n}",
1680+
"{\n \"browserName\": \"chrome\",\n \"platformName\": \"Windows 11\",\n \"browserVersion\": \"91.0\"\n}"
1681+
]
1682+
}
1683+
}
1684+
}`),
1685+
browserName: "chrome",
1686+
sessionBrowserName: "chrome",
1687+
browserVersion: "91.0.4472.114",
1688+
platformName: "linux",
1689+
},
1690+
want: 1,
1691+
wantErr: false,
1692+
},
15291693
}
15301694
for _, tt := range tests {
15311695
t.Run(tt.name, func(t *testing.T) {

Diff for: Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ BUILD_ARGS := $(BUILD_ARGS) --progress plain
1717
MAJOR := $(word 1,$(subst ., ,$(TAG_VERSION)))
1818
MINOR := $(word 2,$(subst ., ,$(TAG_VERSION)))
1919
MAJOR_MINOR_PATCH := $(word 1,$(subst -, ,$(TAG_VERSION)))
20-
FFMPEG_TAG_PREV_VERSION := $(or $(FFMPEG_TAG_PREV_VERSION),$(FFMPEG_TAG_PREV_VERSION),ffmpeg-7.0.2)
20+
FFMPEG_TAG_PREV_VERSION := $(or $(FFMPEG_TAG_PREV_VERSION),$(FFMPEG_TAG_PREV_VERSION),ffmpeg-7.1)
2121
FFMPEG_TAG_VERSION := $(or $(FFMPEG_TAG_VERSION),$(FFMPEG_TAG_VERSION),ffmpeg-7.1)
2222
FFMPEG_BASED_NAME := $(or $(FFMPEG_BASED_NAME),$(FFMPEG_BASED_NAME),linuxserver)
2323
FFMPEG_BASED_TAG := $(or $(FFMPEG_BASED_TAG),$(FFMPEG_BASED_TAG),version-7.1-cli)

Diff for: NodeDocker/config.toml

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
# Configs have a mapping between the Docker image to use and the capabilities that need to be matched to
33
# start a container with the given image.
44
configs = [
5-
"selenium/standalone-firefox:4.25.0-20241010", '{"browserName": "firefox", "platformName": "linux"}',
6-
"selenium/standalone-chrome:4.25.0-20241010", '{"browserName": "chrome", "platformName": "linux"}',
7-
"selenium/standalone-edge:4.25.0-20241010", '{"browserName": "MicrosoftEdge", "platformName": "linux"}'
5+
"selenium/standalone-firefox:4.25.0-20241024", '{"browserName": "firefox", "platformName": "linux"}',
6+
"selenium/standalone-chrome:4.25.0-20241024", '{"browserName": "chrome", "platformName": "linux"}',
7+
"selenium/standalone-edge:4.25.0-20241024", '{"browserName": "MicrosoftEdge", "platformName": "linux"}'
88
]
99

1010
# URL for connecting to the docker daemon
@@ -14,7 +14,7 @@ configs = [
1414
# socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
1515
url = "http://127.0.0.1:2375"
1616
# Docker image used for video recording
17-
video-image = "selenium/video:ffmpeg-7.0.2-20241010"
17+
video-image = "selenium/video:ffmpeg-7.1-20241024"
1818

1919
# Uncomment the following section if you are running the node on a separate VM
2020
# Fill out the placeholders with appropriate values

0 commit comments

Comments
 (0)