diff --git a/build.sh b/build.sh index fcd24e2..7e5ad1b 100755 --- a/build.sh +++ b/build.sh @@ -1,13 +1,27 @@ #!/usr/bin/env bash +# remove old files rm -f raspi_3.img +rm -f raspi_3.img.xz rm -f raspi_3.log +rm -f peach-img-manifest.log + +# build image make raspi_3.img -# copy to releases +# compress image +echo "++ successful image build, performing compression" +xz -k raspi_3.img + +# make releases dir TODAY=$(date +"%Y%m%d") RELEASE_DIR=/var/www/releases.peachcloud.org/html/peach-imgs/$TODAY -echo "++ successful image build, copying output to ${RELEASE_DIR}" +echo "++ copy output to ${RELEASE_DIR}" mkdir -p $RELEASE_DIR -cp raspi_3.img $RELEASE_DIR/${TODAY}_peach_raspi3.img -cp peach-img-manifest.log $RELEASE_DIR/${TODAY}_img_manifest.log -cp raspi_3.log $RELEASE_DIR/${TODAY}_peach_raspi3.log \ No newline at end of file + +# copy over files +cp raspi_3.img.xz $RELEASE_DIR/${TODAY}_peach_raspi3.img.xz +cp raspi_3.log $RELEASE_DIR/${TODAY}_peach_raspi3.log +cp peach-img-manifest.log $RELEASE_DIR/${TODAY}_peach_manifest.log + +# publish image to releases.peachcloud.org +python3 publish_img.py $RELEASE_DIR \ No newline at end of file diff --git a/publish_img.py b/publish_img.py index 8b5ac0a..9a1618f 100644 --- a/publish_img.py +++ b/publish_img.py @@ -1,9 +1,7 @@ import os -import subprocess +import sys import jinja2 import json -import argparse -from datetime import date PROJECT_PATH = os.path.dirname(os.path.realpath(__file__)) @@ -32,80 +30,45 @@ def render_template(src, dest, template_vars=None): f.write(output_text) -def build_img(build=True, publish=True): +def publish_img(release_dir): """ - if build=True, - builds a new PeachCloud image, - compresses the image, - creates a manifest for what was included in that image - and a log for the build of the image + takes in a string path to a directory containing a release - if publish=True - copies the following files to release dir with the current date - - log of build - - compressed img file - - manifest for that image - rebuilds releases.peachcloud.org to point to the release + it expected the directory to be named YEARMONTHDAY + and to contain the following three files: + - YEARMONTHDAY_peach_raspi3.img.xz + - YEARMONTHDAY_peach_raspi3.log + - YEARMONTHDAY_peach_manifest.log - running with both flags as true is standard usage, - but building and publishing separately can be useful for testing + The script re-builds index.html for releases.peachcloud.org to point to + the files in this releases directory. """ + # get release name (last part of path) + release_name = os.path.basename(os.path.normpath(release_dir)) - # these are the three files created by the build - img_path = os.path.join(PROJECT_PATH, 'raspi_3.img') - log_path = os.path.join(PROJECT_PATH, 'raspi_3.log') - manifest_path = os.path.join(PROJECT_PATH, 'peach-img-manifest.log') + # expected file paths within release_dir + img_name = "{}_peach_raspi3.img.xz".format(release_name) + img_path = os.path.join(release_dir, img_name) + manifest_path = os.path.join(release_dir, "{}_peach_manifest.log".format(release_name)) - # if build=True, then remove old files and re-build - if build: - # remove old files - if os.path.exists(img_path): - os.remove(img_path) - if os.path.exists(log_path): - os.remove(log_path) - if os.path.exists(manifest_path): - os.remove(manifest_path) - - # build img - subprocess.check_call(['make', 'raspi_3.img']) - - if publish: - # create release dir for this release - today = date.today() - today_str = "{}{}{}".format(today.year, today.month, today.day) - release_dir = "/var/www/releases.peachcloud.org/html/peach-imgs/{}".format(today_str) - os.makedirs(release_dir) - - # copy image, log and manifest to release dir - print("++ successful image build, copying output to {}", release_dir) - img_release_name = "{}_peach_raspi3.img".format(today_str) - release_log_name = "{}_peach_raspi3.log".format(today_str) - manifest_name = "{}_peach_manifest.log".format(today_str) - img_release_path = os.path.join(release_dir, img_release_name) - log_release_path = os.path.join(release_dir, release_log_name) - manifest_release_path = os.path.join(release_dir, manifest_name) - subprocess.check_call(['cp', img_path, img_release_path]) - subprocess.check_call(['cp', log_path, log_release_path]) - subprocess.check_call(['cp', manifest_path, manifest_release_path]) - - # rebuild index.html to point to the new release - release_index_path = "/var/www/releases.peachcloud.org/html/index.html" - release_img_url = img_path.replace('/var/www/releases.peachcloud.org/html/', '/') - with open(manifest_path, 'r') as f: - manifest = json.loads(f.read()) - for k, v in manifest.items(): - print("{}: {}".format(k, v)) - packages = manifest['packages'] - render_template( - src="release_index.html", - dest=release_index_path, - template_vars={ - "release_img_url": release_img_url, - "release_img_name": img_release_name, - "packages": packages - } - ) + # rebuild index.html to point to the new release + release_index_path = "/var/www/releases.peachcloud.org/html/index.html" + release_img_url = img_path.replace('/var/www/releases.peachcloud.org/html/', '/') + with open(manifest_path, 'r') as f: + manifest = json.loads(f.read()) + for k, v in manifest.items(): + print("{}: {}".format(k, v)) + packages = manifest['packages'] + render_template( + src="release_index.html", + dest=release_index_path, + template_vars={ + "release_img_url": release_img_url, + "release_img_name": img_name, + "packages": packages + } + ) if __name__ == '__main__': - build_img(build=True, publish=True) \ No newline at end of file + publish_img(sys.argv[1]) \ No newline at end of file diff --git a/templates/release_index.html b/templates/release_index.html index 52f8cb1..e813b0e 100644 --- a/templates/release_index.html +++ b/templates/release_index.html @@ -24,17 +24,17 @@

-

PeachCloud Microservices

+

PeachCloud Package Builds

The above image contains the following packages: