Automate build product distribution

Craftr provides a Archive class that can be used to easily create an archive of the products that are generated by the build, in the same step!

# craftr_module(test)
from craftr import *
from craftr.ext import platform, archive as _archive, git as _git
git = _git.Git(project_dir)

binary = platform.ld.link(
  inputs = platform.cc.compile(
    sources = path.glob('src/*.c')
  ),
  output = 'main'
)

@task(requires = [binary])
def archive():
  name = '{}-{}-{}'.format(project_name, git.describe(), platform.name)
  archive = _archive.Archive(prefix = name, base_dir = project_dir)
  archive.add(binary.outputs)
  archive.add('res')
  archive.save()
  info("Archive created:", path.normpath(archive.name, session.cwd))

Below you can find an example invokation of the script on Windows:

λ craftr .archive -v
detected ninja v1.6.0
cd "build"
load 'craftr.ext.test'
(craftr.ext.platform, line 74): Detected VS architecture: amd64
exporting 'build.ninja'
rts listening at 127.0.0.1:54411
$ ninja test.archive -v
[1/3] "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe" /nologo /c c:\users\niklas\desktop\tes\src\main.c /Foc:\users\niklas\desktop\tes\build\test\obj\main.obj "/IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "/IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "/IC:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt" "/IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\shared" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\um" "/IC:\Program Files (x86)\Windows Kits\8.1\include\\winrt" /DWIN32 /D_WIN32 /W4 /Od /showIncludes
[2/3] "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\link.exe" /nologo c:\users\niklas\desktop\tes\build\test\obj\main.obj /OUT:c:\users\niklas\desktop\tes\build\test\main.exe "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" /LIBPATH:C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral" /LIBPATH:\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral
[3/3] craftr-rts-invoke test.archive
(craftr.ext.:rts:): [127.0.0.1:54412] connection accepted
(craftr.ext.:rts:): [127.0.0.1:54412] @@ test.archive()
(craftr.ext.test, line 20): Archive created: c:\users\niklas\desktop\tes\test-v1.1-win.zip