Skip to content

Commit

Permalink
Fill commands and cli interface
Browse files Browse the repository at this point in the history
 - rebrand to alpacabuildtool due to conflict with existing alpaca gem
 - update dependencies
 - add specs and features
 - fill functionality
  • Loading branch information
Vasyl Purchel authored and vasyl-purchel committed May 10, 2015
1 parent d73e098 commit 3fee752
Show file tree
Hide file tree
Showing 158 changed files with 2,370 additions and 12,690 deletions.
16 changes: 15 additions & 1 deletion .gitignore
Expand Up @@ -8,6 +8,7 @@
[Rr]elease
[Oo]bj
*.suo
*.ide

## Documentation cache and generated files:
/.yardoc/
Expand All @@ -31,4 +32,17 @@ offences.html
.rake_t_cache

## coverage
/coverage/
/coverage/

## alpaca generated data
test_data/TestResults
test_data/sln2/packages
**/.tests
**/.output
*.nuspec
CHANGES.txt
README.txt

## mkmf (search tool in $PATH variable)
mkmf.log

6 changes: 3 additions & 3 deletions .rubocop.yml
Expand Up @@ -3,10 +3,10 @@ Style/ModuleFunction:
- bin/alpaca
Style/ClassVars:
Exclude:
- lib/alpaca/configuration.rb
- lib/alpacabuildtool/configuration.rb
AllCops:
Exclude:
- vendor/**/*
Style/GlobalVars:
Lint/Eval:
Exclude:
- lib/alpaca/tools/console_tool.rb
- lib/alpacabuildtool/entities/xml_node.rb
6 changes: 3 additions & 3 deletions .semver
@@ -1,6 +1,6 @@
---
:major: 0
:major: 1
:minor: 0
:patch: 1
:special: 'alpha'
:patch: 0
:special: 'rc'
:metadata: ''
18 changes: 18 additions & 0 deletions CHANGELOG
@@ -0,0 +1,18 @@
= Version 1.0.0-rc
* Rebrand to alpacabuildtool due to conflict with existing alpaca gem
* Complete functionality
* Feature tests coverage for commands
* Specs coverage for main parts
* Automatic downloading of tools
* Generation of nuspec, readme, changelog files for packages
* Update rubocop to v0.30.1
* Tools are classes and not modules
* No Unity3D stubs/support
* Use ruby logger with beautifiers like *header* and *puts*
* New structure of the project
* New specs folder structure to match lib folder
* Complete documentation

= Version 0.0.1-alpha
* in development
* basic structure and functionality
230 changes: 225 additions & 5 deletions README.md
@@ -1,15 +1,235 @@
# Alpaca
# AlpacaBuildTool

[![Build Status](https://travis-ci.org/vasyl-purchel/alpaca.svg?branch=master)](https://travis-ci.org/vasyl-purchel/alpaca)
[![Dependency Status](https://gemnasium.com/vasyl-purchel/alpaca.svg)](https://gemnasium.com/vasyl-purchel/alpaca)
[![Coverage Status](https://coveralls.io/repos/vasyl-purchel/alpaca/badge.svg?branch=master)](https://coveralls.io/r/vasyl-purchel/alpaca?branch=master)
[![Code Climate](https://codeclimate.com/github/vasyl-purchel/alpaca/badges/gpa.svg)](https://codeclimate.com/github/vasyl-purchel/alpaca)
[![Inline docs](https://inch-ci.org/github/vasyl-purchel/alpaca.svg)](http://inch-ci.org/github/vasyl-purchel/alpaca)
[![Gem Version](https://badge.fury.io/rb/alpacabuildtool.svg)](http://badge.fury.io/rb/alpacabuildtool)

Alpaca - is a build tool for C#(Visual Studio solutions) and Unity3D solutions
<p align="center">
<img src="https://raw.githubusercontent.com/vasyl-purchel/alpaca/master/lib/alpaca/data/logo.jpg" alt="Logo"/>
</p>

*in development so not pushed anywhere yet*
**AlpacaBuildTool** is a Ruby gem with **alpaca** command line interface that
helps to work with C# Visual Studio solutions

![Alpaca logo](https://raw.githubusercontent.com/vasyl-purchel/alpaca/master/lib/alpaca/data/logo.jpg "Alpaca is here")
Most aspects of its behavior can be tweaked via various
[configuration options][1]
or via _alpaca configure_ command

[documentation](http://www.rubydoc.info/github/vasyl-purchel/alpaca/master/Alpaca)
- [Installation](#installation)
- [Basic usage](#basic-usage)
- [Configuration](#configuration)
- [Inheritance](#inheritance)
- [Defaults](#defaults)
- [User wide](#user-wide)
- [Solution specific](#solution-specific)
- [Default tools](#tools)
- [Compatibility](#compatibility)
- [Contribution](#contribution)
- [Pull requests](#pull-requests)
- [Changelog](#changelog)
- [Copyright](#copyright)

## Installation

Install gem:

```
$ gem install alpacabuildtool
```

## Basic Usage

```
SYNOPSIS
alpaca [global options] command [command options] [arguments...]
GLOBAL OPTIONS
--help - Show this message
-p, --pattern=arg - Solutions search pattern (default: **/*.sln)
--version - Display the program version
COMMANDS
compile - Compile solution[s]
configure - Configure alpaca to your needs
help - Shows a list of commands or help for one command
pack - Create packages for solution[s]
release - Release packages for solution[s]
report - Generate reports for solution[s]
test - Test solution[s]
update - Update solution[s] versions
```

Run `$ alpaca compile` and by default *alpaca* will search for all solutions
recurcively in current folder and compile all of them unless they have
*nobuild* tag in a name(`no_build: ['.nobuild']`)

It is safe to run alpaca from solution folder or any parent folders
If you want to build only specific solution then use global option
`$ alpaca -p '**/Cool.sln' compile`

Check `$ alpaca command --help` for help on each command

## Configuration

### Inheritance

Alpaca's configuration has 3 levels - default, global, local.
Local configuration has the highest priority so it can override any property
from other configurations. Global configuration can override only default
configuration.

### Defaults

Default configuration _(lib/data/.alpaca.conf)_ is stored with installing gem
so alpaca can work out of the box.
It shouldn't be changed as it will get overriden after gem updated

You can check it's defaults [here][1]

### User Wide

Global configuration _(~/.alpaca.conf)_ can be created manually or
with a help of `alpaca configure global ...`
You can use it to store user wide configuration to apply some tweaks of
default configuration to all your solutions

Check [default configuration][1]
for full explanation of structure and examples

### Solution Specific

Local configuration _(#{solution-folder}/.alpaca.conf)_ can be created
manually or with a help of `alpaca configure local ...`
You can use it to store solution specific configuration like nuget packages
to be created from solution or reports names.

Also you can change default path to local configuration by setting

```yaml
local_configuration: 'any/relative/path/to/local/configuration'
```

_this example will put your local configuration into_
`#{solution-folder}/any/relative/path/to/local/configuration` _file_

Common usage for local configuration would be nuget packages

#### Example

```yaml
packages:
- id: "Package.Unique.Id"
type: :tool
project: "Console.Tool"
source: "tools-repository"
description: "Tool to make cool stuff"
```

#### Notes

If you need to use tool on multi os then you may want to have different values
for executables path's so you can use:

```
field:
:windows: value1
:linux: value2
```

For packages:

Mandatory fields: `id`, `type`, `project`, `source`, `description`, `authors`
Optional fields: `title`, `licenseUrl`, `projectUrl`, `copyright`, `iconUrl`,
`requireLicenseAcceptance`, `releaseNotes`, `tags`, `owners`

Store common fields in global configuration under *all_packages* field

You can use types:

* `:tool` - to put all files from project/bin/[Configuration]/ folder
into tools/
* `:project` - to create usual nuget package from Project.csproj

## Tools

* MSBuild (C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe)
_for compilation_
* Nuget (C:\Nuget\Nuget.exe)
_for package management_
* NUnit (NUnit.Console latest pre-release nuget package)
_for tests_
* OpenCover (OpenCover latest release nuget package)
_for coverage_
* NUnitOrange (NUnitOrange latest release nuget package)
_for nunit tests result convertion to html_
* ReportGenerator (ReportGenerator latest release nuget package)
_for OpenCover result convertion to html_

## Compatibility

Alpaca is tested on travis-ci.org with following Ruby implementations:

* MRI 1.9.3
* MRI 2.0
* MRI 2.1
* MRI 2.2

## Contribution

If you discover issues, have ideas for improvements or new features,
please report them to me <vasyl.purchel@gmail.com> or submit a pull
request. Please, try to follow these guidelines when you do so.

### Rake tasks

```
rake build # Build alpacabuildtool-1.0.0.rc.gem
# into the pkg directory.
rake clean # Remove any temporary products.
rake clobber # Remove any generated file.
rake clobber_rdoc # Remove RDoc HTML files
rake coverage # Run RSpec with code coverage
rake features # Run Cucumber features
rake install # Build and install alpacabuildtool gem
# into system gems.
rake install:local # Build and install alpacabuildtool gem
# into system gems without network access.
rake rdoc # Build RDoc HTML files
rake release # Create tag v{VERSION} and build and
# push alpacabuildtool gem to Rubygems
# To prevent publishing in Rubygems
# use `gem_push=no rake release`
rake rerdoc # Rebuild RDoc HTML files
rake rubocop # Run RuboCop
rake rubocop:auto_correct # Auto-correct RuboCop offenses
rake test # Run RSpec code examples
```

### Pull requests

* Read [how to properly contribute to open source projects on Github][2].
* Fork the project.
* Write [good commit messages][3].
* Commit and push until you are happy with your contribution.
* Make sure to add tests for it. This is important so I don't break it
in a future version unintentionally.
* Add an entry to the [Changelog](CHANGELOG) accordingly.
* [Squash related commits together][4].
* Open a [pull request][5]

## Changelog

Alpaca's changelog is available [here](CHANGELOG).

## Copyright

Copyright (c) 2015 Vasyl Purchel. See [LICENSE](LICENSE) for further details.

[1]: https://github.com/vasyl-purchel/alpaca/blob/master/lib/alpacabuildtool/data/.alpaca.conf
[2]: http://gun.io/blog/how-to-github-fork-branch-and-pull-request
[3]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
[4]: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
[5]: https://help.github.com/articles/using-pull-requests
39 changes: 35 additions & 4 deletions README.rdoc
@@ -1,8 +1,39 @@
=alpaca
= \AlpacaBuildTool - yet another build tool

{<img src="https://travis-ci.org/vasyl-purchel/alpaca.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/vasyl-purchel/alpaca]
{<img src="https://coveralls.io/repos/vasyl-purchel/alpaca/badge.svg" alt="Coverage Status" />}[https://coveralls.io/r/vasyl-purchel/alpaca]
{<img src="https://gemnasium.com/vasyl-purchel/alpaca.svg" alt="Dependency Status" />}[https://gemnasium.com/vasyl-purchel/alpaca]
{<img src="https://coveralls.io/repos/vasyl-purchel/alpaca/badge.svg?branch=master" alt="Coverage Status" />}[https://coveralls.io/r/vasyl-purchel/alpaca?branch=master]
{<img src="https://codeclimate.com/github/vasyl-purchel/alpaca/badges/gpa.svg" alt="Code Climate" />}[https://codeclimate.com/github/vasyl-purchel/alpaca]
{<img src="https://inch-ci.org/github/vasyl-purchel/alpaca.svg" alt="Inline docs" />}[http://inch-ci.org/github/vasyl-purchel/alpaca]
{<img src="https://badge.fury.io/rb/alpacabuildtool.svg" alt="Gem Version" />}[http://badge.fury.io/rb/alpacabuildtool]

+AlpacaBuildTool+ is a Ruby gem with +alpaca+ command line interface that
helps to work with C# Visual Studio solutions

Most aspects of its behavior can be tweaked via various configuration options
or via command

alpaca configure

== Installation

Install gem:

$ gem install alpacabuildtool

== Compatibility

Alpaca is tested on travis-ci.org with following Ruby implementations:

* MRI 1.9.3
* MRI 2.0
* MRI 2.1
* MRI 2.2

== Changelog

Alpaca's changelog is available {here}[https://github.com/vasyl-purchel/alpaca/blob/master/CHANGELOG].

Learning ruby
== Copyright

:include alpaca.rdoc
Copyright (c) 2015 Vasyl Purchel. See {LICENSE}[https://github.com/vasyl-purchel/alpaca/blob/master/LICENSE] for further details.
13 changes: 1 addition & 12 deletions Rakefile
Expand Up @@ -30,7 +30,7 @@ end
Rake::RDocTask.new do |rd|
rd.main = 'README.rdoc'
rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
rd.title = 'Alpaca'
rd.title = 'AlpacaBuildTool'
end

Bundler.setup
Expand All @@ -52,18 +52,7 @@ Cucumber::Rake::Task.new(:features) do |t|
t.fork = false
end

desc 'Run features tagged as work-in-progress (@wip)'
Cucumber::Rake::Task.new('features:wip') do |t|
tag_opts = '--tags @wip'
format_opts = '--format pretty'
output_opts = "--format html -o #{CUKE_RESULTS}"
t.cucumber_opts = "features #{output_opts} #{format_opts} -x -s #{tag_opts}"
t.fork = false
end

task cucumber: :features
task 'cucumber:wip' => 'features:wip'
task wip: 'features:wip'

require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:test) do |task|
Expand Down
5 changes: 0 additions & 5 deletions alpaca.rdoc

This file was deleted.

0 comments on commit 3fee752

Please sign in to comment.