• Stars
    star
    241
  • Rank 167,643 (Top 4 %)
  • Language
    Ruby
  • License
    MIT License
  • Created about 11 years ago
  • Updated over 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Github Xcode Bot Builder

A command line tool that creates/manages/deletes Xcode 5 server bots for each Github pull request. When a pull request is opened a corresponding Xcode bot is created. When a new commit is pushed the bot is re-run. When the build finishes the github pull request status is updated with a comment if there's an error. Users can request that a pull request be retested by adding a comment that includes the word "retest" (case insensitive). When a pull request is closed the corresponding bot is deleted.

Setup

Make sure your Xcode server is correctly setup to allow ANYONE to create a build (without a username or password, see suggested features below). Then make sure you can manually create and execute a build and run it.

Install XCode Command Line tools

xcode-select --install

Clone the github-xcode-bot-builder repository and run bundle install.

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install

Go to your Github Account Settings and create a personal access token which you will use as your github_access_token so that the bot-sync-github script can access your github repo

Create a ~/xcode_bot_builder.json

The example below shows two projects, one project running a single scheme, the other running two different schemes. The pull request will not be marked successful, unless both schemes pass.

{
  "github_access_token": "0123456789012345678901234567890123456789",
  "xcode_server": "192.168.1.1",
  "repos": [
    {
      "github_repo": "org/project1",
      "project_or_workspace": "project1.xcodeproj",
      "bots": [
        {
          "scheme": "Project1",
          "run_analyzer": true,
          "run_test": true,
          "create_archive": true,
          "unit_test_devices": [
            "iphonesimulator iPhone Retina (4-inch) 7.1",
            "iphonesimulator iPhone Retina (4-inch 64-bit) 7.1"
          ]
        }
      ]
    },
    {
      "github_repo": "org/project2",
      "project_or_workspace": "project2.xcodeproj",
      "bots": [
        {
          "scheme": "Project2",
          "run_analyzer": true,
          "run_test": false,
          "create_archive": false,
          "unit_test_devices": [
            "iphonesimulator iPhone Retina (4-inch) 7.1"
          ]
        },
        {
          "scheme": "Project2Tests",
          "run_analyzer": false,
          "run_test": true,
          "create_archive": false,
          "unit_test_devices": [
            "iphonesimulator iPhone Retina (4-inch) 7.1",
            "iphonesimulator iPhone Retina (4-inch 64-bit) 7.1"
          ]
        }
      ]
    }
  ]
}

The api_endpoint and web_endpoint urls can be configured if you use a github enterprise setup, otherwise they can be omitted.

Manually run bot-sync-github from the command line to make sure it works. If you have any open pull requests, a bot should have been created, and the integration started.

Schedule bot-sync-github to run in cron every couple of minutes. Apple's strongly encourages the use of launchd.

A simple way to have it sync every 60 seconds is to put the following in /Library/LaunchDaemons/com.example.github-xcode-bot-builder.plist

The example has everything installed under the user xcodebots. If you use another user you'll want to modify the user, as well as the Label to match your organization

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.example.github-xcode-bot-builder</string>

  <key>UserName</key>
  <string>xcodebots</string>
  
  <key>ProgramArguments</key>
  <array>
    <string>/Users/xcodebots/github-xcode-bot-builder/bin/bot-sync-github</string>
  </array>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardOutPath</key>
  <string>/tmp/github-xcode-bot-builder.log</string>
</dict>
</plist>

Then to start:

sudo launchctl load /Library/LaunchDaemons/com.example.github-xcode-bot-builder.plist

If you want to stop:

sudo launchctl unload /Library/LaunchDaemons/com.example.github-xcode-bot-builder.plist

You can also use cron. For example, if you're using RVM:

*/2 * * * * $HOME/.rvm/bin/ruby-2.0.0-p247 $HOME/.rvm/gems/ruby-2.0.0-p247/bin/bot-sync-github >> /tmp/bot-sync-github.log 2>&1

Troubleshooting

Send us a pull request with your troubleshooting tips here!

Contributing

  • Github Xcode Bot Builder uses Jeweler for managing the Gem, versioning, generating the Gemspec, etc. so do not manually edit the gemspec since it is auto generated from the Rakefile.
  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
  • Fork the project.
  • Start a feature/bugfix branch.
  • Commit and push until you are happy with your contribution.
  • Don't forget to add yourself to the contributors section below

Suggested features to contribute

  • Support for configuring username and password to use with your Xcode server
  • Add specs that use VCR to help us add test coverage
  • Add better error handling
  • Update this README.md to make it easier for new users to get started and troubleshoot

Contributors

Copyright

Copyright (c) 2013 ModCloth. See LICENSE for further details.