#
# 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.
#

completedPhase=step1
commitByProject=true
scm.id=scm-id
scm.url=scm-url
scm.username=username
scm.password=password
scm.privateKey=private-key
scm.passphrase=passphrase
scm.tagBase=tagBase
scm.tagNameFormat=expectedTagNameFormat
scm.branchBase=branchBase
scm.tag=tag

exec.additionalArguments=additional-arguments
exec.pomFileName=pom-file-name

preparationGoals=preparation-goals
completionGoals=completion-goals

project.rel.groupId\:artifactId1=2.0
project.rel.groupId\:artifactId2=3.0
project.dev.groupId\:artifactId1=2.1-SNAPSHOT
project.dev.groupId\:artifactId2=3.0.1-SNAPSHOT

project.scm.groupId\:artifactId1.id=id
project.scm.groupId\:artifactId1.connection=connection
project.scm.groupId\:artifactId1.developerConnection=developerConnection
project.scm.groupId\:artifactId1.url=url
project.scm.groupId\:artifactId1.tag=tag

project.scm.groupId\:artifactId2.connection=connection2
project.scm.groupId\:artifactId2.url=url2

dependency.external\:artifactId.development=1.1-SNAPSHOT
dependency.external\:artifactId.release=1.0
