I’m trying to create a GitHub Actions workflow which releases my maven project (using maven-release-plugin) and pushes the (signed) artifacts to the central maven repository.
The release:prepare
step runs fine (pushes tags to GitHub), but on the release:perform
I’m getting the following error:
Error: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:perform (default-cli) on project myproject: Unable to checkout from SCM
Error: Provider message:
Error: The git-clone command failed.
Error: Command output:
Error: Cloning into '/home/runner/work/myproject/myproject/target/checkout'...
Error: fatal: could not read Username for 'https://github.com': No such device or address
Here’s my workflow:
name: Release MyProject
on:
workflow_dispatch:
inputs:
releaseVersion:
description: 'Release version'
required: true
type: string
developmentVersion:
description: 'Development version after release'
required: true
type: string
publishTo:
description: 'Publish to'
required: true
default: 'MavenCentral'
type: choice
options:
- 'MavenCentral'
- 'none (dry run)'
env:
RELEASE_VERSION: ${{ inputs.releaseVersion }}
DEVELOPMENT_VERSION: ${{ inputs.developmentVersion }}
PUBLISH_TO: ${{ inputs.publishTo }}
jobs:
build_release:
name: build myproject release
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11.0.11'
distribution: 'zulu'
cache: 'maven'
server-id: 'ossrh' # Value of the distributionManagement/repository/id field of the pom.xml
server-username: MAVEN_USERNAME # same name as below env variable
server-password: MAVEN_PASSWORD # same name as below env variable
gpg-private-key: ${{ secrets.PGP_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE # same name as below env variable
- name: Configure git user
run: |
git config user.email "[email protected]"
git config user.name "Github Actions Bot"
- name: Maven clean
run: mvn --batch-mode clean release:clean
shell: bash
- name: Maven release:prepare
run: mvn --batch-mode -DdryRun=${{ env.PUBLISH_TO == 'none (dry run)' }} -DdevelopmentVersion=$DEVELOPMENT_VERSION -DreleaseVersion=$RELEASE_VERSION release:prepare
shell: bash
- name: Maven release:perform
run: mvn --batch-mode -DdryRun=${{ env.PUBLISH_TO == 'none (dry run)' }} release:perform
shell: bash
env:
MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
SCM section of the pom:
<scm>
<connection>scm:git:https://github.com/mycompany/myproject.git</connection>
<developerConnection>scm:git:https://github.com/mycompany/myproject.git</developerConnection>
<url>https://github.com/mycompany/myproject</url>
<tag>HEAD</tag>
</scm>
Here’s the settings.xml
generated by the setup-java@v3
action:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>ossrh</id>
<username>${env.MAVEN_USERNAME}</username>
<password>${env.MAVEN_PASSWORD}</password>
</server>
<server>
<id>gpg.passphrase</id>
<passphrase>${env.GPG_PASSPHRASE}</passphrase>
</server>
</servers>
</settings>
How do I get git to work in the release:perform
step?
2
Answers
In the end I changed the repository's visibility from
private
topublic
which resolved the issue for me.The configuration worked as posted.
The git clone error may be related to:
GitHub – fatal: could not read Username for 'https://github.com': No such file or directory
This would probably be related to some credential issue with the repo you are attempting to clone.
You could also try:
You may explicitly add the git config user.email and user.name executions right before the mvn line.
You may also set:
…only if the credentials from the checkout will be different than the target repo for the git clone from mvn
Also, I’m not sure if you can have spaces in your github user.name:
may need to be revised to: