This is an automated email from the ASF dual-hosted git repository.
HyukjinKwon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new efb7beab8266 [SPARK-56990][INFRA] Move scheduled CIs for 4.x to
branch-4.x
efb7beab8266 is described below
commit efb7beab826614ad60d007fde4b8a7b6031fe9e1
Author: Tian Gao <[email protected]>
AuthorDate: Thu May 21 16:41:42 2026 -0700
[SPARK-56990][INFRA] Move scheduled CIs for 4.x to branch-4.x
### What changes were proposed in this pull request?
Add a unified entry for all scheduled CIs for 4.x. It will use `gh
workflow` to trigger actions on `branch-4.x`.
### Why are the changes needed?
This is the prototype effort to decouple our CIs. All `branch-4.x` related
CIs should only rely on files on `branch-4.x`, with the exception of the new
workflow file which is needed on master to trigger scheduled tasks.
We started on 4.x because it's not a maintenance release now and it's very
close to master so it's acceptable if the CI was a bit bumpy for a few days.
After it stabilizes, we can do the same thing for the maintenance branches.
### Does this PR introduce _any_ user-facing change?
No. CI only.
### How was this patch tested?
We have to trigger it manually to test it out.
### Was this patch authored or co-authored using generative AI tooling?
No.
Closes #56046 from gaogaotiantian/4.x-scheduler.
Authored-by: Tian Gao <[email protected]>
Signed-off-by: Hyukjin Kwon <[email protected]>
---
.github/workflows/branch4x_scheduler.yml | 113 ++++++++++++++++++++++
.github/workflows/build_branch4x.yml | 54 -----------
.github/workflows/build_branch4x_java21.yml | 57 -----------
.github/workflows/build_branch4x_java25.yml | 57 -----------
.github/workflows/build_branch4x_maven.yml | 35 -------
.github/workflows/build_branch4x_maven_java21.yml | 36 -------
.github/workflows/build_branch4x_non_ansi.yml | 53 ----------
.github/workflows/build_branch4x_python.yml | 47 ---------
.github/workflows/build_branch4x_python_3.14.yml | 47 ---------
README.md | 17 ++--
10 files changed, 122 insertions(+), 394 deletions(-)
diff --git a/.github/workflows/branch4x_scheduler.yml
b/.github/workflows/branch4x_scheduler.yml
new file mode 100644
index 000000000000..180cdf0ce65d
--- /dev/null
+++ b/.github/workflows/branch4x_scheduler.yml
@@ -0,0 +1,113 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: "Branch-4.x CI Scheduler"
+
+on:
+ schedule:
+ - cron: '0 4 */2 * *'
+ - cron: '0 7 */2 * *'
+ - cron: '0 11 */2 * *'
+ - cron: '0 16 */2 * *'
+ - cron: '0 18 */2 * *'
+ - cron: '0 19 */2 * *'
+ - cron: '0 21 */2 * *'
+ - cron: '0 22 */2 * *'
+ workflow_dispatch:
+ inputs:
+ target:
+ description: Target workflow to run
+ required: true
+ type: choice
+ default: all
+ options:
+ - all
+ - maven
+ - maven_java21
+ - java21
+ - java25
+ - non_ansi
+ - python_3.11
+ - python_3.14
+
+jobs:
+ schedule:
+ if: github.repository == 'apache/spark'
+ runs-on: ubuntu-latest
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ permissions:
+ actions: write
+ steps:
+ - name: Maven Build
+ if: >-
+ github.event.schedule == '0 16 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'maven' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_maven.yml --repo ${{ github.repository }}
--ref branch-4.x
+ - name: Maven Java 21 Build
+ if: >-
+ github.event.schedule == '0 18 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'maven_java21' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_maven_java21.yml --repo ${{ github.repository
}} --ref branch-4.x
+ - name: Java 17 Build
+ if: >-
+ github.event.schedule == '0 11 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'java17' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_java17.yml --repo ${{ github.repository }}
--ref branch-4.x
+ - name: Java 21 Build
+ if: >-
+ github.event.schedule == '0 7 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'java21' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_java21.yml --repo ${{ github.repository }}
--ref branch-4.x
+ - name: Java 25 Build
+ if: >-
+ github.event.schedule == '0 22 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'java25' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_java25.yml --repo ${{ github.repository }}
--ref branch-4.x
+ - name: Non-ANSI Build
+ if: >-
+ github.event.schedule == '0 4 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'non_ansi' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_non_ansi.yml --repo ${{ github.repository }}
--ref branch-4.x
+ - name: Python 3.11 Build
+ if: >-
+ github.event.schedule == '0 19 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'python_3.11' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_python_3.11.yml --repo ${{ github.repository
}} --ref branch-4.x
+ - name: Python 3.14 Build
+ if: >-
+ github.event.schedule == '0 21 */2 * *' ||
+ (github.event_name == 'workflow_dispatch' &&
+ (inputs.target == 'python_3.14' || inputs.target == 'all'))
+ run: |
+ gh workflow run build_python_3.14.yml --repo ${{ github.repository
}} --ref branch-4.x
diff --git a/.github/workflows/build_branch4x.yml
b/.github/workflows/build_branch4x.yml
deleted file mode 100644
index 444a1470f5f3..000000000000
--- a/.github/workflows/build_branch4x.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build (branch-4.x, Scala 2.13, Hadoop 3, JDK 17)"
-
-on:
- schedule:
- # UTC 11: avoids overlap with branch-4.2 flagship (UTC 13) and branch-4.1
(UTC 12); see branch-41/42 workflow crons at 14:00 for maven.
- - cron: '0 11 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 17
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "SCALA_PROFILE": "scala2.13",
- "PYSPARK_IMAGE_TO_TEST": "",
- "PYTHON_TO_TEST": "",
- "ORACLE_DOCKER_IMAGE_NAME": "gvenzl/oracle-free:23.7-slim"
- }
- jobs: >-
- {
- "build": "true",
- "sparkr": "true",
- "tpcds-1g": "true",
- "docker-integration-tests": "true",
- "k8s-integration-tests": "true",
- "lint" : "true"
- }
diff --git a/.github/workflows/build_branch4x_java21.yml
b/.github/workflows/build_branch4x_java21.yml
deleted file mode 100644
index f6ac767f49e7..000000000000
--- a/.github/workflows/build_branch4x_java21.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build (branch-4.x, Scala 2.13, Hadoop 3, JDK 21)"
-
-on:
- schedule:
- - cron: '0 7 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 21
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "PYSPARK_IMAGE_TO_TEST": "python-311",
- "PYTHON_TO_TEST": "python3.11",
- "SKIP_MIMA": "true",
- "SKIP_UNIDOC": "true",
- "DEDICATED_JVM_SBT_TESTS":
"org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormatV1Suite,org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormatV2Suite,org.apache.spark.sql.execution.datasources.orc.OrcSourceV1Suite,org.apache.spark.sql.execution.datasources.orc.OrcSourceV2Suite"
- }
- jobs: >-
- {
- "build": "true",
- "pyspark": "true",
- "sparkr": "true",
- "tpcds-1g": "true",
- "docker-integration-tests": "true",
- "yarn": "true",
- "k8s-integration-tests": "true",
- "buf": "true",
- "ui": "true"
- }
diff --git a/.github/workflows/build_branch4x_java25.yml
b/.github/workflows/build_branch4x_java25.yml
deleted file mode 100644
index db1a83fdd93f..000000000000
--- a/.github/workflows/build_branch4x_java25.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build (branch-4.x, Scala 2.13, Hadoop 3, JDK 25)"
-
-on:
- schedule:
- - cron: '0 22 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 25
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "PYSPARK_IMAGE_TO_TEST": "python-311",
- "PYTHON_TO_TEST": "python3.11",
- "SKIP_MIMA": "true",
- "SKIP_UNIDOC": "true",
- "DEDICATED_JVM_SBT_TESTS":
"org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormatV1Suite,org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormatV2Suite,org.apache.spark.sql.execution.datasources.orc.OrcSourceV1Suite,org.apache.spark.sql.execution.datasources.orc.OrcSourceV2Suite"
- }
- jobs: >-
- {
- "build": "true",
- "pyspark": "true",
- "sparkr": "true",
- "tpcds-1g": "true",
- "docker-integration-tests": "true",
- "yarn": "true",
- "k8s-integration-tests": "true",
- "buf": "true",
- "ui": "true"
- }
diff --git a/.github/workflows/build_branch4x_maven.yml
b/.github/workflows/build_branch4x_maven.yml
deleted file mode 100644
index fe5fd28b0d6a..000000000000
--- a/.github/workflows/build_branch4x_maven.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build / Maven (branch-4.x, Scala 2.13, Hadoop 3, JDK 17)"
-
-on:
- schedule:
- - cron: '0 16 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/maven_test.yml
- if: github.repository == 'apache/spark'
- with:
- branch: branch-4.x
diff --git a/.github/workflows/build_branch4x_maven_java21.yml
b/.github/workflows/build_branch4x_maven_java21.yml
deleted file mode 100644
index 48afacf97c06..000000000000
--- a/.github/workflows/build_branch4x_maven_java21.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build / Maven (branch-4.x, Scala 2.13, Hadoop 3, JDK 21)"
-
-on:
- schedule:
- - cron: '0 18 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/maven_test.yml
- if: github.repository == 'apache/spark'
- with:
- branch: branch-4.x
- java: 21
diff --git a/.github/workflows/build_branch4x_non_ansi.yml
b/.github/workflows/build_branch4x_non_ansi.yml
deleted file mode 100644
index d5d996790f7d..000000000000
--- a/.github/workflows/build_branch4x_non_ansi.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build / Non-ANSI (branch-4.x, Hadoop 3, JDK 17, Scala 2.13)"
-
-on:
- schedule:
- - cron: '0 4 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 17
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "PYSPARK_IMAGE_TO_TEST": "python-311",
- "PYTHON_TO_TEST": "python3.11",
- "SPARK_ANSI_SQL_MODE": "false",
- }
- jobs: >-
- {
- "build": "true",
- "docs": "true",
- "pyspark": "true",
- "sparkr": "true",
- "tpcds-1g": "true",
- "docker-integration-tests": "true",
- "yarn": "true"
- }
diff --git a/.github/workflows/build_branch4x_python.yml
b/.github/workflows/build_branch4x_python.yml
deleted file mode 100644
index baffa4d9d18f..000000000000
--- a/.github/workflows/build_branch4x_python.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build / Python-only (branch-4.x)"
-
-on:
- schedule:
- - cron: '0 19 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 17
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "PYSPARK_IMAGE_TO_TEST": "python-311",
- "PYTHON_TO_TEST": "python3.11"
- }
- jobs: >-
- {
- "pyspark": "true",
- "pyspark-pandas": "true"
- }
diff --git a/.github/workflows/build_branch4x_python_3.14.yml
b/.github/workflows/build_branch4x_python_3.14.yml
deleted file mode 100644
index 9e3144dfdfca..000000000000
--- a/.github/workflows/build_branch4x_python_3.14.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-name: "Build / Python-only (branch-4.x, Python 3.14)"
-
-on:
- schedule:
- - cron: '0 21 */2 * *'
- workflow_dispatch:
-
-jobs:
- run-build:
- permissions:
- packages: write
- name: Run
- uses: ./.github/workflows/build_and_test.yml
- if: github.repository == 'apache/spark'
- with:
- java: 17
- branch: branch-4.x
- hadoop: hadoop3
- envs: >-
- {
- "PYSPARK_IMAGE_TO_TEST": "python-314",
- "PYTHON_TO_TEST": "python3.14"
- }
- jobs: >-
- {
- "pyspark": "true",
- "pyspark-pandas": "true"
- }
diff --git a/README.md b/README.md
index 4f6f9dd2eff0..2ebaf35f2416 100644
--- a/README.md
+++ b/README.md
@@ -54,14 +54,15 @@ This README file only contains basic setup instructions.
| | [](https://github.com/apache/spark/actions/workflows/build_python_connect40.yml)
|
| | [](https://github.com/apache/spark/actions/workflows/build_python_connect.yml)
|
| | [](https://github.com/apache/spark/actions/workflows/build_sparkr_window.yml)
|
-| branch-4.x | [](https://github.com/apache/spark/actions/workflows/build_branch4x.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_java21.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_java25.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_non_ansi.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_maven.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_maven_java21.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_python.yml)
|
-| | [](https://github.com/apache/spark/actions/workflows/build_branch4x_python_3.14.yml)
|
+| branch-4.x | [](https://github.com/apache/spark/actions/workflows/build_main.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_java17.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_java21.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_java25.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_non_ansi.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_maven.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_maven_java21.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_python_3.11.yml?query=branch%3Abranch-4.x)
|
+| | [](https://github.com/apache/spark/actions/workflows/build_python_3.14.yml?query=branch%3Abranch-4.x)
|
| branch-4.2 | [](https://github.com/apache/spark/actions/workflows/build_branch42.yml)
|
| | [](https://github.com/apache/spark/actions/workflows/build_branch42_java21.yml)
|
| | [](https://github.com/apache/spark/actions/workflows/build_branch42_java25.yml)
|
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]