Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Heroku - .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml #279

Closed
emeraldjava opened this issue Mar 21, 2017 · 11 comments

Comments

@emeraldjava
Copy link

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?

@athrunsun
Copy link

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.

@tmullin
Copy link

tmullin commented May 14, 2017

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

@TheSnoozer
Copy link
Collaborator

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.

@emeraldjava
Copy link
Author

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

@TheSnoozer
Copy link
Collaborator

TheSnoozer commented Jul 3, 2017

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")??

@emeraldjava
Copy link
Author

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

@TheSnoozer
Copy link
Collaborator

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.

@TheSnoozer
Copy link
Collaborator

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

@emeraldjava
Copy link
Author

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

@TheSnoozer
Copy link
Collaborator

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

Thanks for reporting the issue!

@blacelle
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants