Search code examples
githubgithub-actionsmaven-release-plugin

Github Actions: Could not read Username for 'https://github.com' when maven-release-plugin runs release:perform


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?


Solution

  • In the end I changed the repository's visibility from private to public which resolved the issue for me.

    The configuration worked as posted.