diff --git a/packaging/dotnet-core/.gitignore b/packaging/dotnet-core/.gitignore index bf99e1ea..a60017e7 100644 --- a/packaging/dotnet-core/.gitignore +++ b/packaging/dotnet-core/.gitignore @@ -1,5 +1,4 @@ build cache -libsodium.*.nupkg -libsodium.*.nuspec +temp Makefile diff --git a/packaging/dotnet-core/README.md b/packaging/dotnet-core/README.md index 370afdc4..d4d22074 100644 --- a/packaging/dotnet-core/README.md +++ b/packaging/dotnet-core/README.md @@ -2,47 +2,40 @@ This directory contains scripts and files to package libsodium for .NET Core. In .NET Core, it is customary to provide pre-compiled binaries for all platforms as NuGet packages. The purpose of the `prepare.py` script in this directory is -to generate a `Makefile` that downloads pre-compiled libsodium binaries from a -list of sources and creates a NuGet package that can be uploaded to -[nuget.org](https://nuget.org/). +to generate a `Makefile` that downloads and builds libsodium binaries for a +number of platforms and assembles them in a NuGet package that can be uploaded +to [nuget.org](https://nuget.org/). - -#### Sources - -The list of sources is located in `prepare.py` and needs to be updated on each -libsodium release. Currently, libsodium binaries are obtained in the following -ways: - -* For Windows, the binaries are taken from +* For Windows, binaries are obtained from [download.libsodium.org](https://download.libsodium.org/libsodium/releases/). -* For macOS, the binaries are extracted from the +* For macOS, binaries are extracted from the [Homebrew libsodium bottle](https://bintray.com/homebrew/bottles/libsodium). -* For Linux, libsodium is compiled on and downloaded from the - [openSUSE Build Service](https://build.opensuse.org/package/show/home:nsec/libsodium). +* For Linux, libsodium is compiled in Docker containers. + +See `prepare.py` for the complete list of supported platforms. + +The metadata for the NuGet package is located in `libsodium.props`. -#### Metadata +**Making a pre-release** -The metadata for the NuGet package is located in `libsodium.nuspec`. On each -invocation, the `prepare.py` script generates a new version number and creates a -`.nuspec` file that contains the metadata from `libsodium.nuspec`, the generated -version number and the list of binaries. - - -#### Making a release - -1. Update `_service` to reflect the current libsodium version. -2. Download `libsodium.spec` and `libsodium.changes` from - [here](https://build.opensuse.org/package/show?project=devel%3Alibraries%3Ac_c%2B%2B&package=libsodium). -3. Upload `_service`, `libsodium.spec`, `libsodium.changes` and the current - `libsodium-{version}.tar.gz` to openSUSE Build Service. -4. Update the libsodium version, file names and download URLs in `prepare.py`. -5. Run `./prepare.py` to generate the `Makefile` and - `libsodium.{version}.nuspec`. -6. Run `make` to download the binaries and create `libsodium.{version}.nupkg`. - You may need to install `unzip`, `rpm2cpio` and `dotnet-dev` first. -7. Verify that everything in the `.nupkg` file is in place. -8. Publish the release by uploading the `.nupkg` file to +1. Run `python3 prepare.py 1.0.11-preview-01` to generate the `Makefile`. + `1.0.11` is the libsodium version number; `01` is the pre-release + number and needs to be incremented for each pre-release. +2. Take a look at the generated `Makefile`. It uses `sudo` a few times. +3. Run `make` to download and build the binaries and create the NuGet + package. You may need to install `docker`, `make`, `curl`, `tar` and + `unzip` first. The NuGet package is output as a `.nupkg` file in the + `build` directory. +4. Grab a cup of coffee. Downloading the Docker images and compiling the + Linux binaries takes a while. +5. Verify that everything in the `.nupkg` file is in place. +6. Publish the release by uploading the `.nupkg` file to [nuget.org](https://nuget.org/). -9. Commit the updated `prepare.py` and `version.json` to the libsodium - repository. + + +**Making a release** + +1. Run `python3 prepare.py 1.0.11` to generate the `Makefile`. + +The remaining steps are the same. diff --git a/packaging/dotnet-core/_service b/packaging/dotnet-core/_service deleted file mode 100644 index c6895234..00000000 --- a/packaging/dotnet-core/_service +++ /dev/null @@ -1,17 +0,0 @@ - - - ftp - ftp.us.debian.org - /debian/pool/main/libs/libsodium/libsodium_1.0.11-1.dsc - - - ftp - ftp.us.debian.org - /debian/pool/main/libs/libsodium/libsodium_1.0.11.orig.tar.gz - - - ftp - ftp.us.debian.org - /debian/pool/main/libs/libsodium/libsodium_1.0.11-1.debian.tar.xz - - diff --git a/packaging/dotnet-core/libsodium.nuspec b/packaging/dotnet-core/libsodium.nuspec deleted file mode 100644 index 12a254a9..00000000 --- a/packaging/dotnet-core/libsodium.nuspec +++ /dev/null @@ -1,19 +0,0 @@ - - - - libsodium - - Frank Denis - Frank Denis - true - https://raw.githubusercontent.com/jedisct1/libsodium/master/LICENSE - https://libsodium.org/ - - A modern and easy-to-use crypto library, packaged for use with .NET Core - © 2013-2017 Frank Denis - - - - - - diff --git a/packaging/dotnet-core/libsodium.props b/packaging/dotnet-core/libsodium.props new file mode 100644 index 00000000..7fc4c00a --- /dev/null +++ b/packaging/dotnet-core/libsodium.props @@ -0,0 +1,27 @@ + + + + netstandard1.1 + true + true + false + $(MSBuildProjectDirectory) + $(MSBuildProjectFullPath) + + + libsodium + + Frank Denis + Internal implementation package not meant for direct consumption. Please do not reference directly. + © 2013-2017 Frank Denis + true + https://raw.githubusercontent.com/jedisct1/libsodium/master/LICENSE + https://libsodium.org/ + + + + + + + + diff --git a/packaging/dotnet-core/prepare.py b/packaging/dotnet-core/prepare.py index 660304cc..00882546 100644 --- a/packaging/dotnet-core/prepare.py +++ b/packaging/dotnet-core/prepare.py @@ -1,268 +1,239 @@ #!/usr/bin/python3 -import datetime -import json import os.path +import re import sys -import xml.etree.ElementTree as ET - -# -# OUTPUT CONFIGURATION -# - -# Package metadata -NUPKG_ID = 'libsodium' -NUPKG_VERSION = '1.0.11' - -# The names of the libsodium binaries in the package -LIBSODIUM_DLL = 'libsodium.dll' -LIBSODIUM_DYLIB = 'libsodium.dylib' -LIBSODIUM_SO = 'libsodium.so' - -# -# INPUT CONFIGURATION -# - -# The archives to download -WIN_FILE = 'libsodium-1.0.11-msvc.zip' -DEB_FILE = 'libsodium18_1.0.11-1_amd64.deb' -RPM_FILE = 'libsodium18-1.0.11-14.1.x86_64.rpm' -OSX_FILE = 'libsodium-1.0.11.{0}.bottle.tar.gz' - -# The URLs of the archives -OFFICIAL_URL = 'https://download.libsodium.org/libsodium/releases/{0}' -OPENSUSE_URL = 'http://download.opensuse.org/repositories/home:/nsec/{0}/{1}/{2}' -HOMEBREW_URL = 'https://bintray.com/homebrew/bottles/download_file?file_path={0}' - -# The files within the archives to extract -WIN_LIB = '{0}/Release/v140/dynamic/libsodium.dll' -DEB_LIB = './usr/lib/x86_64-linux-gnu/libsodium.so.18.1.1' -RPM_LIB = './usr/lib64/libsodium.so.18.1.1' -OSX_LIB = 'libsodium/1.0.11/lib/libsodium.18.dylib' - -# Commands to extract a file from an archive -DEB_EXTRACT = 'ar -p {0} data.tar.xz | tar xJ "{1}"' -RPM_EXTRACT = 'rpm2cpio {0} | cpio -i "{1}"' -TAR_EXTRACT = 'tar xzf {0} "{1}"' -ZIP_EXTRACT = 'unzip {0} "{1}"' - -# The inputs -INPUTS = [ - - ( 'win10-x64', - WIN_FILE, - OFFICIAL_URL.format(WIN_FILE), - WIN_LIB.format('x64'), - ZIP_EXTRACT, - LIBSODIUM_DLL), - - ( 'win10-x86', - WIN_FILE, - OFFICIAL_URL.format(WIN_FILE), - WIN_LIB.format('Win32'), - ZIP_EXTRACT, - LIBSODIUM_DLL), - - ( 'debian.8-x64', - DEB_FILE, - OPENSUSE_URL.format('Debian_8.0', 'amd64', DEB_FILE), - DEB_LIB, - DEB_EXTRACT, - LIBSODIUM_SO), - - ( 'ubuntu.14.04-x64', - DEB_FILE, - OPENSUSE_URL.format('xUbuntu_14.04', 'amd64', DEB_FILE), - DEB_LIB, - DEB_EXTRACT, - LIBSODIUM_SO), - - ( 'ubuntu.16.04-x64', - DEB_FILE, - OPENSUSE_URL.format('xUbuntu_16.04', 'amd64', DEB_FILE), - DEB_LIB, - DEB_EXTRACT, - LIBSODIUM_SO), - - ( 'ubuntu.16.10-x64', - DEB_FILE, - OPENSUSE_URL.format('xUbuntu_16.10', 'amd64', DEB_FILE), - DEB_LIB, - DEB_EXTRACT, - LIBSODIUM_SO), - - ( 'centos.7-x64', - RPM_FILE, - OPENSUSE_URL.format('CentOS_7', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'fedora.23-x64', - RPM_FILE, - OPENSUSE_URL.format('Fedora_23', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'fedora.24-x64', - RPM_FILE, - OPENSUSE_URL.format('Fedora_24', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'fedora.25-x64', - RPM_FILE, - OPENSUSE_URL.format('Fedora_25', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'opensuse.42.1-x64', - RPM_FILE, - OPENSUSE_URL.format('openSUSE_Leap_42.1', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'opensuse.42.2-x64', - RPM_FILE, - OPENSUSE_URL.format('openSUSE_Leap_42.2', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'rhel.7-x64', - RPM_FILE, - OPENSUSE_URL.format('RHEL_7', 'x86_64', RPM_FILE), - RPM_LIB, - RPM_EXTRACT, - LIBSODIUM_SO), - - ( 'osx.10.10-x64', - OSX_FILE.format('yosemite'), - HOMEBREW_URL.format(OSX_FILE.format('yosemite')), - OSX_LIB, - TAR_EXTRACT, - LIBSODIUM_DYLIB), - - ( 'osx.10.11-x64', - OSX_FILE.format('el_capitan'), - HOMEBREW_URL.format(OSX_FILE.format('el_capitan')), - OSX_LIB, - TAR_EXTRACT, - LIBSODIUM_DYLIB), - - ( 'osx.10.12-x64', - OSX_FILE.format('sierra'), - HOMEBREW_URL.format(OSX_FILE.format('sierra')), - OSX_LIB, - TAR_EXTRACT, - LIBSODIUM_DYLIB), +WINDOWS = [ + # --------------------- ----------------- # + # Runtime ID Platform # + # --------------------- ----------------- # + ( 'win10-x64', 'x64' ), + ( 'win10-x86', 'Win32' ), + # --------------------- ----------------- # ] -# The version cookie -COOKIE_FILE = 'version.json' +MACOS = [ + # --------------------- ----------------- # + # Runtime ID Codename # + # --------------------- ----------------- # + ( 'osx.10.10-x64', 'yosemite' ), + ( 'osx.10.11-x64', 'el_capitan' ), + ( 'osx.10.12-x64', 'sierra' ), + # --------------------- ----------------- # +] -# -# INTERMEDIATE FILES -# +LINUX = [ + # --------------------- ------------------ + # Runtime ID Docker Image + # --------------------- ------------------ + ( 'alpine.3-x64', 'alpine:3.4' ), + ( 'centos.7-x64', 'centos:7.1.1503' ), + ( 'debian.8-x64', 'debian:8.2' ), + ( 'fedora.24-x64', 'fedora:24' ), + ( 'fedora.25-x64', 'fedora:25' ), + ( 'opensuse.42.1-x64', 'opensuse:42.1' ), + ( 'ubuntu.14.04-x64', 'ubuntu:trusty' ), + ( 'ubuntu.16.04-x64', 'ubuntu:xenial' ), + ( 'ubuntu.16.10-x64', 'ubuntu:yakkety' ), + # --------------------- ------------------ +] +EXTRAS = [ 'LICENSE', 'AUTHORS', 'ChangeLog' ] + +PROPSFILE = 'libsodium.props' +MAKEFILE = 'Makefile' +BUILDDIR = 'build' CACHEDIR = 'cache' -TEMPDIR = 'build' +TEMPDIR = 'temp' -# -# DO NOT EDIT BELOW THIS LINE -# +PACKAGE = 'libsodium' +LIBRARY = 'libsodium' -class Item: - def __init__(self, input, cachedir, tempdir): - rid, archive, url, file, extract, lib = input +DOCKER = 'sudo docker' - self.rid = rid - self.archive = archive - self.url = url - self.file = file - self.extract = extract - self.lib = lib +class Version: - self.cachefile = os.path.join(cachedir, rid, archive) - self.sourcedir = os.path.join(tempdir, rid) - self.sourcefile = os.path.join(tempdir, rid, os.path.normpath(file)) - self.targetfile = os.path.join('runtimes', rid, 'native', lib) + def __init__(self, prefix, suffix): + self.prefix = prefix + self.suffix = suffix + self.version = prefix + '-' + suffix if suffix is not None else prefix -def create_nuspec(template, nuspec, version, items): - tree = ET.parse(template) - package = tree.getroot() - metadata = package.find('metadata') - metadata.find('version').text = version - files = package.find('files') - for item in items: - ET.SubElement(files, 'file', src=item.sourcefile, target=item.targetfile).tail = '\n' - tree.write(nuspec, 'ascii', '') + self.builddir = os.path.join(BUILDDIR, prefix) + self.tempdir = os.path.join(TEMPDIR, prefix) + self.projfile = os.path.join(self.builddir, '{0}.pkgproj'.format(PACKAGE)) + self.propsfile = os.path.join(self.builddir, '{0}.props'.format(PACKAGE)) + self.pkgfile = os.path.join(BUILDDIR, '{0}.{1}.nupkg'.format(PACKAGE, self.version)) -def create_makefile(makefile, nupkg, nuspec, items): - with open(makefile, 'w') as f: - for item in items: - f.write('FILES += {0}\n'.format(item.sourcefile)) +class WindowsItem: + + def __init__(self, version, rid, platform): + self.url = 'https://download.libsodium.org/libsodium/releases/libsodium-{0}-msvc.zip'.format(version.prefix) + self.cachefile = os.path.join(CACHEDIR, re.sub(r'[^A-Za-z0-9.]', '-', self.url)) + self.packfile = os.path.join(version.builddir, 'runtimes', rid, 'native', LIBRARY + '.dll') + self.itemfile = '{0}/Release/v140/dynamic/libsodium.dll'.format(platform) + self.tempdir = os.path.join(version.tempdir, rid) + self.tempfile = os.path.join(self.tempdir, os.path.normpath(self.itemfile)) + + def make(self, f): f.write('\n') - f.write('{0}: {1} $(FILES)\n\tdotnet nuget pack $<\n'.format(nupkg, nuspec)) - for item in items: - f.write('\n') - f.write('{0}:\n\t@mkdir -p $(dir $@)\n\tcurl -f#Lo $@ "{1}"\n'.format(item.cachefile, item.url)) - for item in items: - f.write('\n') - f.write('{0}: {1}\n\t@mkdir -p $(dir $@)\n\tcd {2} && {3}\n'.format( - item.sourcefile, - item.cachefile, - item.sourcedir, - item.extract.format(os.path.relpath(item.cachefile, item.sourcedir), item.file))) + f.write('{0}: {1}\n'.format(self.packfile, self.tempfile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcp -f $< $@\n') + f.write('\n') + f.write('{0}: {1}\n'.format(self.tempfile, self.cachefile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcd {0} && unzip -q -DD -o {1} \'{2}\'\n'.format( + self.tempdir, + os.path.relpath(self.cachefile, self.tempdir), + self.itemfile + )) -def make_prerelease_version(version, suffix, cookie_file): - cookies = dict() - if os.path.isfile(cookie_file): - with open(cookie_file, 'r') as f: - cookies = json.load(f) - cookie = cookies.get(suffix, '---').split('-') - year, month, day, *rest = datetime.datetime.utcnow().timetuple() - major = '{0:03}{1:02}'.format(year * 12 + month - 23956, day) - minor = int(cookie[3]) + 1 if cookie[:3] == [version, suffix, major] else 1 - result = '{0}-{1}-{2}-{3:02}'.format(version, suffix, major, minor) - cookies[suffix] = result - with open(cookie_file, 'w') as f: - json.dump(cookies, f, indent=4, sort_keys=True) - return result +class MacOSItem: + + def __init__(self, version, rid, codename): + self.url = 'https://bintray.com/homebrew/bottles/download_file?file_path=libsodium-{0}.{1}.bottle.tar.gz'.format(version.prefix, codename) + self.cachefile = os.path.join(CACHEDIR, re.sub(r'[^A-Za-z0-9.]', '-', self.url)) + self.packfile = os.path.join(version.builddir, 'runtimes', rid, 'native', LIBRARY + '.dylib') + self.itemfile = 'libsodium/{0}/lib/libsodium.dylib'.format(version.prefix) + self.tempdir = os.path.join(version.tempdir, rid) + self.tempfile = os.path.join(self.tempdir, os.path.normpath(self.itemfile)) + + def make(self, f): + f.write('\n') + f.write('{0}: {1}\n'.format(self.packfile, self.tempfile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcp -f $< $@\n') + f.write('\n') + f.write('{0}: {1}\n'.format(self.tempfile, self.cachefile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcd {0} && tar xzmf {1} \'{2}\'\n'.format( + self.tempdir, + os.path.relpath(self.cachefile, self.tempdir), + os.path.dirname(self.itemfile) + )) + +class LinuxItem: + + def __init__(self, version, rid, docker_image): + self.url = 'https://download.libsodium.org/libsodium/releases/libsodium-{0}.tar.gz'.format(version.prefix) + self.cachefile = os.path.join(CACHEDIR, re.sub(r'[^A-Za-z0-9.]', '-', self.url)) + self.packfile = os.path.join(version.builddir, 'runtimes', rid, 'native', LIBRARY + '.so') + self.docker_image = docker_image + self.recipe = rid + + def make(self, f): + recipe = self.recipe + while not os.path.exists(os.path.join('recipes', recipe)): + m = re.fullmatch(r'([^.-]+)((([.][^.-]+)*)[.][^.-]+)?([-].*)?', recipe) + if m.group(5) is None: + recipe = 'build' + break + elif m.group(2) is None: + recipe = m.group(1) + else: + recipe = m.group(1) + m.group(3) + m.group(5) + + f.write('\n') + f.write('{0}: {1}\n'.format(self.packfile, self.cachefile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\t{0} run --rm '.format(DOCKER) + + '-v $(abspath recipes):/io/recipes ' + + '-v $(abspath $<):/io/libsodium.tar.gz ' + + '-v $(abspath $(dir $@)):/io/output ' + + '{0} sh -x -e /io/recipes/{1}\n'.format(self.docker_image, recipe)) + +class ExtraItem: + + def __init__(self, version, filename): + self.url = 'https://download.libsodium.org/libsodium/releases/libsodium-{0}.tar.gz'.format(version.prefix) + self.cachefile = os.path.join(CACHEDIR, re.sub(r'[^A-Za-z0-9.]', '-', self.url)) + self.packfile = os.path.join(version.builddir, filename) + self.itemfile = 'libsodium-{0}/{1}'.format(version.prefix, filename) + self.tempdir = version.tempdir + self.tempfile = os.path.join(self.tempdir, os.path.normpath(self.itemfile)) + + def make(self, f): + f.write('\n') + f.write('{0}: {1}\n'.format(self.packfile, self.tempfile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcp -f $< $@\n') + f.write('\n') + f.write('{0}: {1}\n'.format(self.tempfile, self.cachefile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcd {0} && tar xzmf {1} \'{2}\'\n'.format( + self.tempdir, + os.path.relpath(self.cachefile, self.tempdir), + self.itemfile + )) def main(args): - if len(args) > 2 or len(args) > 1 and not args[1].isalpha: - print('usage: {0} [label]'.format(os.path.basename(args[0]))) - sys.exit(1) + m = re.fullmatch(r'(\d+(?:\.\d+){1,3})(?:-(\w+(?:[_.-]\w+)*))?', args[1]) if len(args) == 2 else None - version = NUPKG_VERSION + if m is None: + print('Usage:') + print(' python3 prepare.py [-preview-##]') + print() + print('Examples:') + print(' python3 prepare.py 1.0.11-preview-01') + print(' python3 prepare.py 1.0.11-preview-02') + print(' python3 prepare.py 1.0.11-preview-03') + print(' python3 prepare.py 1.0.11') + return 1 - if len(args) > 1: - suffix = args[1].lower() - else: - suffix = 'preview' + version = Version(m.group(1), m.group(2)) - if suffix != 'release': - version = make_prerelease_version(version, suffix, COOKIE_FILE) - print('updated', COOKIE_FILE) + items = [ WindowsItem(version, rid, platform) for (rid, platform) in WINDOWS ] + \ + [ MacOSItem(version, rid, codename) for (rid, codename) in MACOS ] + \ + [ LinuxItem(version, rid, docker_image) for (rid, docker_image) in LINUX ] + \ + [ ExtraItem(version, filename) for filename in EXTRAS ] - template = NUPKG_ID + '.nuspec' - nuspec = NUPKG_ID + '.' + version + '.nuspec' - nupkg = NUPKG_ID + '.' + version + '.nupkg' + downloads = {item.cachefile: item.url for item in items} - tempdir = os.path.join(TEMPDIR, version) - items = [Item(input, CACHEDIR, tempdir) for input in INPUTS] + with open(MAKEFILE, 'w') as f: + f.write('all: {0}\n'.format(version.pkgfile)) - create_nuspec(template, nuspec, version, items) - print('created', nuspec) + for download in sorted(downloads): + f.write('\n') + f.write('{0}:\n'.format(download)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcurl -f#Lo $@ \'{0}\'\n'.format(downloads[download])) - create_makefile('Makefile', nupkg, nuspec, items) - print('created', 'Makefile', 'to make', nupkg) + for item in items: + item.make(f) + + f.write('\n') + f.write('{0}: {1}\n'.format(version.propsfile, PROPSFILE)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\tcp -f $< $@\n') + + f.write('\n') + f.write('{0}: {1}\n'.format(version.projfile, version.propsfile)) + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\techo \'' + + '' + + ''.format(os.path.relpath(version.propsfile, os.path.dirname(version.projfile))) + + '' + + '{0}'.format(version.prefix) + + '' + + '\' > $@\n') + + f.write('\n') + f.write('{0}:'.format(version.pkgfile)) + f.write(' \\\n\t\t{0}'.format(version.projfile)) + f.write(' \\\n\t\t{0}'.format(version.propsfile)) + for item in items: + f.write(' \\\n\t\t{0}'.format(item.packfile)) + f.write('\n') + f.write('\t@mkdir -p $(dir $@)\n') + f.write('\t{0} run --rm '.format(DOCKER) + + '-v $(abspath recipes):/io/recipes ' + + '-v $(abspath $(dir $<)):/io/input ' + + '-v $(abspath $(dir $@)):/io/output ' + + '{0} sh -x -e /io/recipes/{1} "{2}"\n'.format('microsoft/dotnet:latest', 'pack', version.suffix)) + + print('prepared', MAKEFILE, 'to make', version.pkgfile) + return 0 if __name__ == '__main__': - main(sys.argv) + sys.exit(main(sys.argv)) diff --git a/packaging/dotnet-core/recipes/alpine-x64 b/packaging/dotnet-core/recipes/alpine-x64 new file mode 100644 index 00000000..c0eb4186 --- /dev/null +++ b/packaging/dotnet-core/recipes/alpine-x64 @@ -0,0 +1,3 @@ +apk add --update alpine-sdk + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/recipes/centos-x64 b/packaging/dotnet-core/recipes/centos-x64 new file mode 100644 index 00000000..04db18b2 --- /dev/null +++ b/packaging/dotnet-core/recipes/centos-x64 @@ -0,0 +1,3 @@ +yum install -y binutils gcc make tar + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/recipes/debian-x64 b/packaging/dotnet-core/recipes/debian-x64 new file mode 100644 index 00000000..e22c9efc --- /dev/null +++ b/packaging/dotnet-core/recipes/debian-x64 @@ -0,0 +1,4 @@ +apt-get update +apt-get install -y --no-install-recommends build-essential + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/recipes/fedora-x64 b/packaging/dotnet-core/recipes/fedora-x64 new file mode 100644 index 00000000..aebdb40a --- /dev/null +++ b/packaging/dotnet-core/recipes/fedora-x64 @@ -0,0 +1,3 @@ +dnf install -y binutils gcc make tar + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/recipes/opensuse-x64 b/packaging/dotnet-core/recipes/opensuse-x64 new file mode 100644 index 00000000..13cfee47 --- /dev/null +++ b/packaging/dotnet-core/recipes/opensuse-x64 @@ -0,0 +1,3 @@ +zypper install -y --no-recommends -n binutils gcc make tar + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/recipes/pack b/packaging/dotnet-core/recipes/pack new file mode 100644 index 00000000..dc74eda4 --- /dev/null +++ b/packaging/dotnet-core/recipes/pack @@ -0,0 +1,5 @@ +cp -r /io/input ~/build +cd ~/build +dotnet restore +dotnet pack --version-suffix "$1" +cp *.nupkg /io/output diff --git a/packaging/dotnet-core/recipes/ubuntu-x64 b/packaging/dotnet-core/recipes/ubuntu-x64 new file mode 100644 index 00000000..e22c9efc --- /dev/null +++ b/packaging/dotnet-core/recipes/ubuntu-x64 @@ -0,0 +1,4 @@ +apt-get update +apt-get install -y --no-install-recommends build-essential + +. $(dirname $0)/build diff --git a/packaging/dotnet-core/version.json b/packaging/dotnet-core/version.json deleted file mode 100644 index 26166e89..00000000 --- a/packaging/dotnet-core/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "preview": "1.0.11-preview-24920-01" -} \ No newline at end of file