////
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.
////
:documentationPath: /workflow/actions/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/workflow/actions/repeat/src/main/doc/repeat.adoc
= Repeat

== Description

This action allows you to repeat the pipeline or workflow of your choice until a certain condition.
The condition is either:

* A variable in the workflow is set or set to a certain value
* The End Repeat action is executed in the specified repeating workflow

== Options

[width="90%", options="header"]
|===
|Option|Description

|Workflow action name|The name of the workflow action.

|File to repeat|The filename of the pipeline or workflow to execute repeatedly.

|Run configuration|The pipeline or workflow run configuration to use.

*Please note* that if you set a variable on a remote server the value is currently not reported back so only local workflow engines are currently supported.

|Stop repeating when this variable is set|Specify the variable you want to be checked before stopping the repeat loop

|Optional variable value| Only stop repeating when the above variable is set and contains this exact value

|Keep variable values after execution| This option keeps the variable values after a (repeating) pipeline or workflow execution to inject into the next iteration.

|Logging file|In this group you can specify if you want to log to a file and how that should be done

|Parameters/Variables to set|You can specify the values of any parameters or variables in this dialog.
The values can contain variables themselves which will be resolved before every iteration.
If the option ```Keep variable values after execution``` is set we evaluate the expression only once before the first execution of the file.

|===

