Posted on February 23, 2014
The vast majority of AppVeyor customers use Git, specifically GitHub. Historically, we’ve been using Mercurial for AppVeyor source control, but recently due to the growing popularity and ecosystem of Git and GitHub we thought maybe it’s time to jump Git train and start using it for AppVeyor projects.
The first problem we faced with was converting existing Mercurial repositories to Git with preserving all history and authors. If you search in Google for converting mercurial to git on Windows you will find some (mostly similar) posts on SO, but none of them worked for us if followed “as is” on Windows. After many trials we found the way that 100% works and could be easily reproduced - everything was done from scratch on a clean Windows Server 2012 machine.
We assume you start from a clean Windows Server 2012 machine.
Open command line prompt and make sure all tools are available in the
PATH: hg, git, python.
We will be doing everything in
Open command prompt.
Clone source Mercurial repository:
hg clone https://bitbucket.org/appveyor/demoapp
Create an empty GitHub repository and clone it to
git clone https://github.com/AppVeyor/DemoApp.git demoapp_git
git clone http://repo.or.cz/r/fast-export.git
c:\projects\fast-export\hg-fast-export.py in Notepad and replace highlighted region with the code below:
#!/usr/bin/env python # Copyright (c) 2007, 2008 Rocco Rutte <firstname.lastname@example.org> and others. # License: MIT <http://www.opensource.org/licenses/mit-license.php> import sys # import mercurial libraries from zip: sys.path.append(r'C:\Program Files (x86)\Mercurial\library.zip') from mercurial import node from hg2git import setup_repo, fixup_user, get_branch, get_changeset from hg2git import load_cache, save_cache, get_git_sha1, set_default_branch, set_origin_name from optparse import OptionParser import re import os
Copy content of
demoapp_git ignoring .git folder.
If you need to map authors to new repository with different name/email create
authors.txt with one mapping per line (old=new), like below:
Feodor Fitsner <email@example.com>=Feodor Fitsner <firstname.lastname@example.org>
Run Python script to import Mercurial repo into Git one (you are running this script from Git repository directory):
hg-fast-export.sh -r c:\projects\demoapp -A authors.txt
Checkout HEAD to check that everything looks good:
git checkout HEAD
Remove conversion files:
git clean -f del /Q hg2git.pyc
Rename .hgignore to .gitignore:
ren .hgignore .gitignore git add .gitignore git commit -m ".hgignore renamed to .gitignore"
Push Git repo to GitHub:
git push -u origin master
Posted on February 21, 2014
NOTE: NuGet support is available in AppVeyor CI 2.0 which is currently in beta. Please see this post for AppVeyor 2.0 announcement and sign up information.
AppVeyor CI has native NuGet support which becomes de-facto a packaging standard for .NET libraries and applications.
Every AppVeyor account comes with following built-in NuGet feeds:
Account NuGet feed aggregates packages from all project feeds and allows publishing of your custom packages. All account feeds are password-protected. You can find account feed URL and its API key on Account → NuGet page:
You can use your AppVeyor account email/password to access password-protected NuGet feeds although we recommend creating a separate user account just for these purposes (Account → Team).
If you use GitHub or BitBucket button to login AppVeyor you can reset your AppVeyor account password using the Forgot password link.
For publishing your own packages to account feed use the command:
nuget push <your-package.nupkg> -ApiKey <your-api-key> -Source <feed-url>
<feed-url> with values from Account → NuGet page.
Project feed collects all NuGet packages pushed to artifacts during the build. Project feed is password-protected if the project references private GitHub or BitBucket repository; otherwise project feed has public access:
You can enable automatic publishing of NuGet packages during the build on Build tab of project settings. When it is enabled AppVeyor calls
nuget pack for every project in the solution having
.nuspec file in the root and then publishes NuGet package artifact in both project and account feeds.
To generate a
.nuspec file for your project run the following command from project root directory:
To push NuGet package as artifact and publish it in both project and account feeds use this command anywhere in your build script:
appveyor PushArtifact <your-nugetpackage.nupkg>
When you delete a project in AppVeyor its corresponding NuGet feed is deleted, however all NuGet packages from that feed remain published in account feed.
To configure custom feed in Visual Studio open Tools → Options → Package Manager → Package Sources and add new feed.
When you first open Manage NuGet packages dialog you will be presented with a dialog box asking for credentials:
To configure private NuGet feed on your development machine run this command:
nuget sources add -Name <friendly-name> -Source <feed-url> -UserName <username> -Password <pass>
You may use account feed to publish your external packages that can be further referenced during AppVeyor builds.
To configure AppVeyor project to use private NuGet feed during build you can use the following approach:
Into Install script box add this command:
nuget sources add -Name MyAccountFeed -Source <feed-url> -UserName %nuget_user% -Password %nuget_password%
<feed-url> with URL of your account feed.
To restore Visual Studio solution NuGet packages before build add this command to Before build script box on Build tab of project settings (provided your
.sln file or
packages.config are in the root of repository):
otherwise if project solution is in sub-directory:
nuget restore <solution-folder>\<solution.sln>
Posted on February 19, 2014
After 4 months of intensive development we are excited to announce a public beta of AppVeyor 2.0! The new release provides you with whole new experience: build environment that is under your full control, large projects support with build matrix and parallel testing, scriptless deployment and release management!
You could see those great features in flagman continuous integration services for Linux such as Travis CI, but not for Windows up until now. Today, I’m really proud to say that AppVeyor is the only CI solution for Windows that offers dedicated build machines with admin access, build matrix with jobs parallelization and integrated deployment.
In AppVeyor 2.0 we are moving away from shared build servers to dedicated VMs. Every build job runs on pristine VM with admin rights! This was probably the main reason for kicking-off this release.
AppVeyor 2.0 has built-in hosting for private and public NuGet feeds.
Every account comes with a private password-protected NuGet feed aggregating packages from all projects and enabling publishing of your custom packages.
Projects have separate NuGet feeds with all NuGet packages pushed as artifacts.
Easily build/test for multiple configurations. Specify which operating systems, build configurations and platforms you would like to include into build matrix and AppVeyor will start a build with multiple jobs for all combinations.
Build matrix supports the following dimensions:
Large projects can contain hundreds and thousands of tests that could run for hours. AppVeyor 2.0 allows to split your tests into groups by categories, assemblies or custom criteria and run them as build jobs in parallel thus drastically reducing overall build time.
AppVeyor 2.0 has scriptless, repetitive one-click deployment to multiple environments! Deploy as part of the build or promote releases later - manually or through API.
Supported deployment providers:
Great Windows software must provide user interface for any function it has. AppVeyor 2.0 follows this tradition and further extends project settings, so you can control build environment and inject custom script logic on any stage of build pipeline without ever touching your repository!
For command-line gurus or those coming from Linux we added fancy YAML configuration support! Add appveyor.yml with project configuration into root of your repository and next time you fork the repo just add a new project in AppVeyor.
AppVeyor 2.0 has completely re-designed UI to get results faster and on the go!
AngularJS, SignalrR and Foundation helped us to build great experience we’re really proud of:
Enjoy the beta!
Feodor Fitsner, AppVeyor founder and developer
Posted on October 01, 2013
In this short presentation I’m talking about AppVeyor CI features and benefits, comparing it to the existing continuous integration solutions and giving some hints about future plans.
Posted on September 25, 2013
It’s been a while since we last talked as we were working hard implementing really cool stuff and processing user requests to make AppVeyor more stable, secure and fast. Today we are thrilled to announce a huge update to AppVeyor CI service and start of its commercial availability!
We spent long nights polishing our new PowerShell deployment framework - AppRolla. AppRolla is extensible framework tightly integrated with AppVeyor for automating deployment of distributed .NET applications to multi-server environments.
Just some of its features and benefits:
Checkout web application project deployment article to learn how to:
We got numerous requests from our customers to integrate AppVeyor with Kiln source control from FogCreek Software. Though we are not affiliated with them Kiln looks compelling for projects with private repositories because of its per-user pricing (yes, you can create any number of repositories) and cool “Kiln harmony” feature when every single repository can be used from both Git and Mercurial, simultaneously. Integration with AppVeyor does not require an additional Kiln user - you just create a new “access token” and use it when creating a new project in AppVeyor.
We added GitHub organizations support and revised OAuth scopes required to access your GitHub account and repositories. AppVeyor makes sure only the minimum set of GitHub permissions is requested just to do the job.
In addition to high-level “Visual Studio solution” and “MSBuild” scenarios we added custom build scripts with maximum control over CI process. You can author build script in PowerShell or as a batch file and use any build tools like MSBuild, PSake, NUnit, xUnit, Node.js in your custom workflow.
While running a custom build script AppVeyor provides you integration points for:
See creating custom build scripts article for more details.
Out of the box AppVeyor pushes build artifacts in a cloud storage which is GEO-replicated and shared between tenants. We added custom storage support which allows you to configure either Azure blob storage or Amazon S3 account to store build artifacts for your projects. Custom storage that is configured per-account gives you additional benefits:
See packaging artifacts article for more details.
Go language from Google is gaining momentum and if you are interested in learning/using Go and coming from Windows world AppVeyor is a great platform for doing CI for your next Go project. Take a look at this sample Go repository (thanks Nathan Youngman for his help) to see simple Go project structure and build.cmd to kick-off testing in AppVeyor CI environment.
AppVeyor is a single page application (SPA) built with AngularJS (and we promise to tell about its internals in our blog) and all its functionality is available through REST API. We created lightweight AppVeyor API PowerShell library which is currently used by AppRolla deployment script and shows how to authenticate API calls and get details about your projects. We will be adding more functions into it over time.
You can put the image on your project website displaying the status of the last build. URL of this image and markdown snippet could be found on “Status badges” tab of project settings.
We processed a lot of feedback from our customers which allowed us to substantially improve AppVeyor CI, increase its security and stability. We have a strong feeling that AppVeyor is ready for prime time and today we announce its commercial availability.
What that means for you? Starting today (September 25th), we offer you a free 30-day trial with unlimited private repositories. During the trial period we will keep in touch with you closely to assist you with the new functionality and work out the best plan for your current needs.
Our goal is to provide you outstanding service with competitive and reasonable pricing. We gave our pricing a second thought and came up with 3 simple paid plans:
Compare to $67 per month AWS or Azure small instance running TeamCity or Jenkins!
AppVeyor is free for open-source projects with public repositories.
That’s a ton of new information that could be hard to digest. We are going to publish educational articles in our blog on various topics ranging from deployment automation to AppVeyor development secrets. We’ve been quite active on Twitter (and this is really cool support tool), so make sure to follow us to stay updated.
Best regards, Feodor Fitsner, AppVeyor founder and developer