Git-commit-id-maven-plugin: Heroku - .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml

Created on 21 Mar 2017  路  11Comments  路  Source: git-commit-id/git-commit-id-maven-plugin

Hi,

I plugged in the 'git-commit-id-plugin' and it works perfectly on a local build. The pom config is

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>build-info</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>2.2.2</version> </plugin> </plugins> </build>

When i attempt to deploy my app to heroku the build and deploy failed with this error

remote: [ERROR] Failed to execute goal pl.project13.maven:git-commit-id-plugin:2.2.2:revision (default) on project salesninja: .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml -> [Help 1]

when i run the basic heroku deploy command of

git push heroku master

has anybody seen or have a workaround for this?

still open? not-a-bug

Most helpful comment

I encountered this same issue. Heroku apparently doesn't copy the .git folder to your dyno making it impossible to use this plugin.

I did find this SO answer and was able to use it as a workaround: http://stackoverflow.com/a/34536363/1437395

See https://gist.github.com/tmullin/bd17e3a05607d2b11349ef73ebbca84d

The accepted answer for that SO question is also interesting, but I'd rather use my workaround than create a post-commit hook: http://stackoverflow.com/a/14924922/1437395

All 11 comments

Are you working on your code in a separate worktree created by git worktree add command? Unfortunately this plugin doesn't support git worktree yet. But we have an option to skip execution of it, see here.

I encountered this same issue. Heroku apparently doesn't copy the .git folder to your dyno making it impossible to use this plugin.

I did find this SO answer and was able to use it as a workaround: http://stackoverflow.com/a/34536363/1437395

See https://gist.github.com/tmullin/bd17e3a05607d2b11349ef73ebbca84d

The accepted answer for that SO question is also interesting, but I'd rather use my workaround than create a post-commit hook: http://stackoverflow.com/a/14924922/1437395

I just created a heroku account and followed the steps provided in
https://devcenter.heroku.com/articles/getting-started-with-java

heroku login
cd /tmp
git clone https://github.com/heroku/java-getting-started.git
cd java-getting-started
heroku create
git push heroku master [works what would you expect else]

after this initial test I added the following to the pom.xml:

<plugin>
            <groupId>pl.project13.maven</groupId>
            <artifactId>git-commit-id-plugin</artifactId>
            <version>2.2.2</version>
            <!-- optional to change the phases of the individual mojo's -->
            <executions>
              <execution>
                <id>get-the-git-infos</id>
                <goals>
                  <goal>revision</goal>
                </goals>
              </execution>
              <execution>
                <id>validate-the-git-infos</id>
                <goals>
                  <goal>validateRevision</goal>
                </goals>
                <phase>package</phase>
             </execution>
            </executions>
            <configuration>
              <verbose>true</verbose>
              <skip>false</skip>
              <prefix>git</prefix>
              <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
              <generateGitPropertiesFile>true</generateGitPropertiesFile>
              <generateGitPropertiesFilename>target/testing.properties</generateGitPropertiesFilename>
              <dateFormat>dd.MM.yyyy '@' HH:mm:ss z</dateFormat>
              <dateFormatTimeZone>GMT-08:00</dateFormatTimeZone>
              <useNativeGit>false</useNativeGit>
              <abbrevLength>7</abbrevLength>
              <format>properties</format>
              <injectAllReactorProjects>true</injectAllReactorProjects>
              <gitDescribe>
                <skip>false</skip>
                <always>false</always>
                <abbrev>7</abbrev>
                <match>*</match>
                <dirty>-DEVEL</dirty>
                <forceLongFormat>false</forceLongFormat>
              </gitDescribe>
              <excludeProperties>
                <excludeProperty>git.commit.*</excludeProperty>
                <excludeProperty>git.remote.origin.url</excludeProperty>
              </excludeProperties>
              <failOnNoGitDirectory>false</failOnNoGitDirectory>
              <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
            </configuration>
</plugin>

It should not matter what your config looks like

git add pom.xml
git commit -m "adding git-commit-id-plugin to heruku"
git push heroku master
.......
remote:        [INFO] --- git-commit-id-plugin:2.2.2:validateRevision (validate-the-git-infos) @ java-getting-started ---
remote:        [INFO] 
remote:        [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ java-getting-started ---
remote:        [INFO] Installing /tmp/build_691c5fcf438acec0086db9cbba4e97a5/target/java-getting-started-1.0.jar to /app/tmp/cache/.m2/repository/com/example/java-getting-started/1.0/java-getting-started-1.0.jar
remote:        [INFO] Installing /tmp/build_691c5fcf438acec0086db9cbba4e97a5/pom.xml to /app/tmp/cache/.m2/repository/com/example/java-getting-started/1.0/java-getting-started-1.0.pom
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] BUILD SUCCESS
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] Total time: 7.050 s
remote:        [INFO] Finished at: 2017-06-30T16:26:56+00:00
remote:        [INFO] Final Memory: 37M/209M
remote:        [INFO] ------------------------------------------------------------------------
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 64.5M
remote: -----> Launching...
remote:        Released v5
remote:        https://cryptic-ravine-11327.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy.... done.

Build works without any issues as of right now; tested with linux.

Hi,
I copied the same config to my pom.xml, but am seeing the following where the 'dotGitDirectory' is null

remote: [INFO] --- git-commit-id-plugin:2.2.2:revision (default) @ salesninja --- remote: [INFO] dotGitDirectory is null, aborting execution! remote: [INFO] remote: [INFO] --- git-commit-id-plugin:2.2.2:revision (get-the-git-infos) @ salesninja --- remote: [INFO] dotGitDirectory is null, aborting execution!

later in the build i see

remote: [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ salesninja --- remote: [INFO] Building jar: /tmp/build_5312c46ab8cc2adeadb09358938224f1/target/salesninja-0.0.2-SNAPSHOT.jar remote: [INFO] remote: [INFO] --- spring-boot-maven-plugin:1.5.1.RELEASE:repackage (default) @ salesninja --- remote: [INFO] remote: [INFO] --- git-commit-id-plugin:2.2.2:validateRevision (validate-the-git-infos) @ salesninja ---

Can you outline the steps need to reproduce the issue??
What is your OS?
What is heroku version??
Can you share a sample project where I can reproduce the issue (can't reproduce it with the default "how to")??

Hi,
I created this simple spring boot app which uses the accuator and has a custom git REST endpoint

https://github.com/emeraldjava/git-commit-id-heroku-demo

the URL's to test the local service are

http://localhost:8080/info
http://localhost:8080/git

again, this app fails to deploy on heroku because the git.properties file isn't generated.
thanks
P

After some testing and the way heroku seems to work there is pretty much barely anything I can do within the plugin to fix this issue. In order to determine the git properties this plugin is meant to have access to the git-repository. Without it its simply impossible to retrieve any information. Since the heroku doesn't copy over the .git-Folder this plugin can't get the author, branch, .... pretty much nothing.

The only possible improvement I can see here is to check from the plugin side if the environment variable HEROKU_SLUG_COMMIT is set and the render in the git-commit-id and git-commit-id-abbrev based on the information.

Downsides:

  • any other information is still not available
  • one need to execute heroku labs:enable runtime-dyno-metadata -a <app name> in order to have this working
  • without the previous command there seems to be no environment variable set to detect that the build is running within heroku

As a result even if this would be introduced into the plugin only the git-commit and git-commit-id-abbrev information would be available.

Can you live with the workaround or want something in the plugin?

Thanks for the investigation. It's a shame heroku doesn't nice with the git repo clone. I can use the alternative options.

fully agree!
unfortunately I can't change how it works.....even a shallow clone would solve the problem....

Thanks for reporting the issue!

@TheSnoozer In the tested config, you have 'false' -> The build is OK, but Git information are certainly not available.

Was this page helpful?
0 / 5 - 0 ratings