diff --git a/CI/before-deploy-osx.sh b/CI/before-deploy-osx.sh
index d327ca89a..54f237977 100755
--- a/CI/before-deploy-osx.sh
+++ b/CI/before-deploy-osx.sh
@@ -1,8 +1,15 @@
+curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/packagesbuild
+chmod +x ./packagesbuild
+curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/packagesutil
+chmod +x ./packagesutil
+
export GIT_HASH=$(git rev-parse --short HEAD)
export FILE_DATE=$(date +%Y-%m-%d.%H:%M:%S)
-export FILENAME=$FILE_DATE-$GIT_HASH-osx.zip
+export FILENAME=$FILE_DATE-$GIT_HASH-osx.pkg
mkdir nightly
cd ./build
sudo python ../CI/install/osx/build_app.py
-sudo zip -r -X $FILENAME OBS.app
+packagesbuild ../CI/install/osx/CMakeLists.pkgproj
+
+sudo cp OBS.pkg ./$FILENAME
sudo mv ./$FILENAME ../nightly
diff --git a/CI/install/osx/CMakeLists.pkgproj b/CI/install/osx/CMakeLists.pkgproj
new file mode 100644
index 000000000..8551bb9c7
--- /dev/null
+++ b/CI/install/osx/CMakeLists.pkgproj
@@ -0,0 +1,1021 @@
+
+
+
+
+ PACKAGES
+
+
+ PACKAGE_FILES
+
+ DEFAULT_INSTALL_LOCATION
+ /
+ HIERARCHY
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+ GID
+ 80
+ PATH
+ ../../../build/OBS.app
+ PATH_TYPE
+ 3
+ PERMISSIONS
+ 493
+ TYPE
+ 3
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 80
+ PATH
+ Utilities
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ Applications
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 509
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+ GID
+ 80
+ PATH
+ ../../../build/plugins/obs-browser/CEF.app
+ PATH_TYPE
+ 3
+ PERMISSIONS
+ 493
+ TYPE
+ 3
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 80
+ PATH
+ ../../../build/plugins/obs-browser/obs-browser.so
+ PATH_TYPE
+ 3
+ PERMISSIONS
+ 493
+ TYPE
+ 3
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ bin
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 2
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ obs-browser
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 2
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ plugins
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 2
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ obs-studio
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 2
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ Application Support
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Documentation
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Filesystems
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Frameworks
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Input Methods
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Internet Plug-Ins
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ LaunchAgents
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ LaunchDaemons
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ PreferencePanes
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Preferences
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 80
+ PATH
+ Printers
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ PrivilegedHelperTools
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ QuickLook
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ QuickTime
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Screen Savers
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Scripts
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Services
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Widgets
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 0
+ PATH
+ Library
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Extensions
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 0
+ PATH
+ Library
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 0
+ PATH
+ System
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ CHILDREN
+
+
+ CHILDREN
+
+ GID
+ 0
+ PATH
+ Shared
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 1023
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 80
+ PATH
+ Users
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+
+ GID
+ 0
+ PATH
+ /
+ PATH_TYPE
+ 0
+ PERMISSIONS
+ 493
+ TYPE
+ 1
+ UID
+ 0
+
+ PAYLOAD_TYPE
+ 0
+ VERSION
+ 2
+
+ PACKAGE_SCRIPTS
+
+ POSTINSTALL_PATH
+
+ PREINSTALL_PATH
+
+ RESOURCES
+
+
+ PACKAGE_SETTINGS
+
+ AUTHENTICATION
+ 1
+ CONCLUSION_ACTION
+ 0
+ IDENTIFIER
+ org.obsproject.pkg.obs-studio
+ NAME
+ OBS
+ OVERWRITE_PERMISSIONS
+
+ VERSION
+ 1.0
+
+ UUID
+ 19CCE3F2-8911-4364-B673-8B5BC3ABD4DA
+
+
+ PACKAGE_SETTINGS
+
+ LOCATION
+ 0
+ NAME
+ SyphonInject
+
+ PATH
+
+ PATH
+ SyphonInject.pkg
+ PATH_TYPE
+ 1
+
+ TYPE
+ 1
+ UUID
+ 0CC9C67E-4D14-4794-9930-019925513B1C
+
+
+ PROJECT
+
+ PROJECT_COMMENTS
+
+ NOTES
+
+ PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1M
+ IDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv
+ c3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l
+ cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
+ IGNoYXJzZXQ9VVRGLTgiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250
+ ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp
+ dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u
+ dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD
+ b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE1MDQuNzYiPgo8c3R5bGUg
+ dHlwZT0idGV4dC9jc3MiPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5
+ Pgo8L2JvZHk+CjwvaHRtbD4K
+
+
+ PROJECT_PRESENTATION
+
+ BACKGROUND
+
+ ALIGNMENT
+ 4
+ BACKGROUND_PATH
+
+ PATH
+ obs.png
+ PATH_TYPE
+ 1
+
+ CUSTOM
+ 1
+ SCALING
+ 0
+
+ INSTALLATION TYPE
+
+ HIERARCHIES
+
+ INSTALLER
+
+ LIST
+
+
+ DESCRIPTION
+
+ OPTIONS
+
+ HIDDEN
+
+ STATE
+ 0
+
+ PACKAGE_UUID
+ 19CCE3F2-8911-4364-B673-8B5BC3ABD4DA
+ REQUIREMENTS
+
+ TITLE
+
+ TOOLTIP
+
+ TYPE
+ 0
+ UUID
+ 7C540711-59F4-479C-9CFD-8C4D6594992E
+
+
+ DESCRIPTION
+
+ OPTIONS
+
+ HIDDEN
+
+ STATE
+ 1
+
+ PACKAGE_UUID
+ 0CC9C67E-4D14-4794-9930-019925513B1C
+ REQUIREMENTS
+
+ TITLE
+
+ TOOLTIP
+
+ TYPE
+ 0
+ UUID
+ BBDE08F6-D7EE-47CB-881F-7F208B3A604B
+
+
+ REMOVED
+
+
+
+ INSTALLATION TYPE
+ 0
+ MODE
+ 0
+
+ INSTALLATION_STEPS
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewIntroductionController
+ INSTALLER_PLUGIN
+ Introduction
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewReadMeController
+ INSTALLER_PLUGIN
+ ReadMe
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewLicenseController
+ INSTALLER_PLUGIN
+ License
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewDestinationSelectController
+ INSTALLER_PLUGIN
+ TargetSelect
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewInstallationTypeController
+ INSTALLER_PLUGIN
+ PackageSelection
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewInstallationController
+ INSTALLER_PLUGIN
+ Install
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS
+ ICPresentationViewSummaryController
+ INSTALLER_PLUGIN
+ Summary
+ LIST_TITLE_KEY
+ InstallerSectionTitle
+
+
+ INTRODUCTION
+
+ LOCALIZATIONS
+
+
+ LICENSE
+
+ KEYWORDS
+
+ LOCALIZATIONS
+
+ MODE
+ 0
+
+ README
+
+ LOCALIZATIONS
+
+
+ SUMMARY
+
+ LOCALIZATIONS
+
+
+ TITLE
+
+ LOCALIZATIONS
+
+
+ LANGUAGE
+ English
+ VALUE
+ OBS
+
+
+
+
+ PROJECT_REQUIREMENTS
+
+ LIST
+
+ POSTINSTALL_PATH
+
+ PREINSTALL_PATH
+
+ RESOURCES
+
+ ROOT_VOLUME_ONLY
+
+
+ PROJECT_SETTINGS
+
+ ADVANCED_OPTIONS
+
+ BUILD_FORMAT
+ 0
+ BUILD_PATH
+
+ PATH
+ ../../../build
+ PATH_TYPE
+ 3
+
+ EXCLUDED_FILES
+
+
+ PATTERNS_ARRAY
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .DS_Store
+ TYPE
+ 0
+
+
+ PROTECTED
+
+ PROXY_NAME
+ Remove .DS_Store files
+ PROXY_TOOLTIP
+ Remove ".DS_Store" files created by the Finder.
+ STATE
+
+
+
+ PATTERNS_ARRAY
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .pbdevelopment
+ TYPE
+ 0
+
+
+ PROTECTED
+
+ PROXY_NAME
+ Remove .pbdevelopment files
+ PROXY_TOOLTIP
+ Remove ".pbdevelopment" files created by ProjectBuilder or Xcode.
+ STATE
+
+
+
+ PATTERNS_ARRAY
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ CVS
+ TYPE
+ 1
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .cvsignore
+ TYPE
+ 0
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .cvspass
+ TYPE
+ 0
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .svn
+ TYPE
+ 1
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .git
+ TYPE
+ 1
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ .gitignore
+ TYPE
+ 0
+
+
+ PROTECTED
+
+ PROXY_NAME
+ Remove SCM metadata
+ PROXY_TOOLTIP
+ Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems.
+ STATE
+
+
+
+ PATTERNS_ARRAY
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ classes.nib
+ TYPE
+ 0
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ designable.db
+ TYPE
+ 0
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ info.nib
+ TYPE
+ 0
+
+
+ PROTECTED
+
+ PROXY_NAME
+ Optimize nib files
+ PROXY_TOOLTIP
+ Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles.
+ STATE
+
+
+
+ PATTERNS_ARRAY
+
+
+ REGULAR_EXPRESSION
+
+ STRING
+ Resources Disabled
+ TYPE
+ 1
+
+
+ PROTECTED
+
+ PROXY_NAME
+ Remove Resources Disabled folders
+ PROXY_TOOLTIP
+ Remove "Resources Disabled" folders.
+ STATE
+
+
+
+ SEPARATOR
+
+
+
+ NAME
+ OBS
+
+
+ TYPE
+ 0
+ VERSION
+ 2
+
+
diff --git a/CI/install/osx/OBSPublicDSAKey.pem b/CI/install/osx/OBSPublicDSAKey.pem
new file mode 100644
index 000000000..d4721051c
--- /dev/null
+++ b/CI/install/osx/OBSPublicDSAKey.pem
@@ -0,0 +1,36 @@
+-----BEGIN PUBLIC KEY-----
+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
+0tZk6dhMjtrBOkZMfnBbSKDKQlcHvXM25yIjgA==
+-----END PUBLIC KEY-----
diff --git a/CI/install/osx/SyphonInject.pkg b/CI/install/osx/SyphonInject.pkg
new file mode 100644
index 000000000..4371acc00
Binary files /dev/null and b/CI/install/osx/SyphonInject.pkg differ
diff --git a/CI/install/osx/obs.png b/CI/install/osx/obs.png
new file mode 100644
index 000000000..364211cbf
--- /dev/null
+++ b/CI/install/osx/obs.png
@@ -0,0 +1,703 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ obs-studio-utils/obs.png at master · kc5nra/obs-studio-utils
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Permalink
+
+
+
+
+
+
+
+
+
+ b83a806
+
+ Oct 1, 2014
+
+
+
+
+
+ 1
+ contributor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to Line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You can't perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+
You signed in with another tab or window. Reload to refresh your session.
+
You signed out in another tab or window. Reload to refresh your session.
+
+
+
+
+
+
+
+
diff --git a/CI/install/osx/package_util.py b/CI/install/osx/package_util.py
new file mode 100644
index 000000000..2ab0b9473
--- /dev/null
+++ b/CI/install/osx/package_util.py
@@ -0,0 +1,94 @@
+def cmd(cmd):
+ import subprocess
+ import shlex
+ return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
+
+def get_tag_info(tag):
+ rev = cmd('git rev-parse {0}'.format(latest_tag))
+ anno = cmd('git cat-file -p {0}'.format(rev))
+ tag_info = []
+ for i, v in enumerate(anno.splitlines()):
+ if i <= 4:
+ continue
+ tag_info.append(v.lstrip())
+
+ return tag_info
+
+def gen_html(github_user, latest_tag):
+
+ url = 'https://github.com/{0}/obs-studio/commit/%H'.format(github_user)
+
+ with open('readme.html', 'w') as f:
+ f.write("")
+ log_cmd = """git log {0}...HEAD --pretty=format:'• (view) %s '"""
+ log_res = cmd(log_cmd.format(latest_tag, url))
+ if len(log_res.splitlines()):
+ f.write('Changes since {0}: (Newest to oldest)
'.format(latest_tag))
+ f.write(log_res)
+
+ ul = False
+ f.write('')
+ import re
+
+ for l in get_tag_info(latest_tag):
+ if not len(l):
+ continue
+ if l.startswith('*'):
+ ul = True
+ if not ul:
+ f.write('
')
+ f.write('• {0} '.format(re.sub(r'^(\s*)?[*](\s*)?', '', l)))
+ else:
+ if ul:
+ f.write('
')
+ ul = False
+ f.write('{0}
'.format(l))
+ if ul:
+ f.write('')
+ f.write('')
+
+ cmd('textutil -convert rtf readme.html -output readme.rtf')
+ cmd("""sed -i '' 's/Times-Roman/Verdana/g' readme.rtf""")
+
+def save_manifest(latest_tag, user, jenkins_build, branch, stable):
+ log = cmd('git log --pretty=oneline {0}...HEAD'.format(latest_tag))
+ manifest = {}
+ manifest['commits'] = []
+ for v in log.splitlines():
+ manifest['commits'].append(v)
+ manifest['tag'] = {
+ 'name': latest_tag,
+ 'description': get_tag_info(latest_tag)
+ }
+
+ manifest['version'] = cmd('git rev-list HEAD --count')
+ manifest['sha1'] = cmd('git rev-parse HEAD')
+ manifest['jenkins_build'] = jenkins_build
+
+ manifest['user'] = user
+ manifest['branch'] = branch
+ manifest['stable'] = stable
+
+ import cPickle
+ with open('manifest', 'w') as f:
+ cPickle.dump(manifest, f)
+
+def prepare_pkg(project, package_id):
+ cmd('packagesutil --file "{0}" set package-1 identifier {1}'.format(project, package_id))
+ cmd('packagesutil --file "{0}" set package-1 version {1}'.format(project, '1.0'))
+
+
+import argparse
+parser = argparse.ArgumentParser(description='obs-studio package util')
+parser.add_argument('-u', '--user', dest='user', default='jp9000')
+parser.add_argument('-p', '--package-id', dest='package_id', default='org.obsproject.pkg.obs-studio')
+parser.add_argument('-f', '--project-file', dest='project', default='OBS.pkgproj')
+parser.add_argument('-j', '--jenkins-build', dest='jenkins_build', default='0')
+parser.add_argument('-b', '--branch', dest='branch', default='master')
+parser.add_argument('-s', '--stable', dest='stable', required=False, action='store_true', default=False)
+args = parser.parse_args()
+
+latest_tag = cmd('git describe --tags --abbrev=0')
+gen_html(args.user, latest_tag)
+prepare_pkg(args.project, args.package_id)
+save_manifest(latest_tag, args.user, args.jenkins_build, args.branch, args.stable)