0

The first thing I should mention is that I can't use ssh.

With that out of the way, if anyone can help I'll be eternally grateful.

I need to run a post-build script on my bot which creates a tag and pushes it to the remote upon build success. I've tried running it as a "post" script defined on the bot, as a "build stage" within the project build settings, and as a post-build script in the custom shared scheme I'm using for CI. The script looks like this:

if [ -z "$PROJECT_DIR" ]; then
    echo "No project dir variable"
else
    cd $PROJECT_DIR;
    echo "PROJECT_DIR is $PROJECT_DIR";
    echo "Directory is $(pwd)";

    git config user.email "myself@mycompany.com"
    git config user.name "myself"
    CURRENTTAG=$(git describe --abbrev=0 --tags);
    echo "CURRENTTAG is $CURRENTTAG";
    CURRENTTAG_PRE=`echo $CURRENTTAG | awk -F "_" '{print $1}'`;
    echo "CURRENTTAG_PRE is $CURRENTTAG_PRE";
    CURRENTTAG_POST=`echo $CURRENTTAG | awk -F "_" '{print $2}'`;
    echo "CURRENTTAG_POST is $CURRENTTAG_POST";

    if [ -z "$CURRENTTAG_POST" ]; then
        echo "catastrophic failure"
        exit 0
    else
        CURRENTTAG_POST=$(($CURRENTTAG_POST + 1));
        SPACE="_";
        NEW_TAG=$CURRENTTAG_PRE$SPACE$CURRENTTAG_POST;
        echo "NEW_TAG is $NEW_TAG";
        git tag -a $NEW_TAG -m "$NEW_TAG";
        git push origin "$NEW_TAG"

        echo "New tag $(git describe --abbrev=0 --tags) created"
    fi
fi

So, the hack with the git config commands is there to stop git from asking the bot "Please tell me who you are". Once the bot gets past that, though, the git push fails with the following:

fatal: could not read Password for 'https://myself@mygitremote.com': Device not configured

Can anyone offer any HTTPS-based suggestions as to how I can get past this?

Incidentally, I'm on Xcode 6.4 and Server 4.1.2.

Thanks.

EDIT: I've seen a lot of solutions out there which start out by sudoing into _xcsbuildd's shell. In Xcode Server 4.1 there is most certainly not a home directory for _xcsbuildd, so you can't "git config --global" anything.

  • 1
    Have you put a password in the `.netrc` file or somewhere else that the git push can be read from? – AlBlue Jul 10 '15 at 21:20
  • the problem there would be that the _xcsbuildd user that runs the scripts does not really have a $HOME or a shell. I tried giving it a shell and it started breaking other things elsewhere. This makes any solution based on user-level settings impossible. – user872133 Jul 14 '15 at 21:09
  • note you don't need to run `git config --global` -- that's if you want to have the credentials for every repository. If you run `git config` then it will apply the changes to that repository only. – AlBlue Jul 15 '15 at 10:46

1 Answers1

0

I had the similar problem. I was trying to push changes to git remote repository from bot's pre-trigger script and each time I received:

fatal: could not read Username for 'http://...': Device not configured

My final solution was to store credentials in the keychain for the _xcsbuildd user:

# login as a _xcsbuildd user
sudo -u _xcsbuildd /bin/bash
# store credentials in the default osx keychain
git credential-osxkeychain store https://github.com
# copy added credentials from `login` keychain to `System` keychain
kowal
  • 899
  • 8
  • 9