diff --git a/.github/workflows/release-prepare.yml b/.github/workflows/release-prepare.yml index d0f15df9..30ed2912 100644 --- a/.github/workflows/release-prepare.yml +++ b/.github/workflows/release-prepare.yml @@ -43,7 +43,7 @@ jobs: if [ -n "${pr_number}" ]; then echo "Updating PR #${pr_number}" - existing_comment_id=$(hub api "/repos/${GITHUB_REPOSITORY}/issues/${pr_number}/comments" | jq '.[] | select(.user.login=="${GITHUB_USERNAME}") | .id') + existing_comment_id=$(hub api "/repos/${GITHUB_REPOSITORY}/issues/${pr_number}/comments" | jq ".[] | select(.user.login==\"${GITHUB_USERNAME}\") | .id") else echo "Opening PR" hub pull-request -b "${RELEASE_BRANCH}" -h develop -F <(echo "${pr_body}") > /tmp/pr.json diff --git a/.holo/branches/fixtures/_laddr.toml b/.holo/branches/fixtures/_laddr.toml new file mode 100644 index 00000000..e3765317 --- /dev/null +++ b/.holo/branches/fixtures/_laddr.toml @@ -0,0 +1,4 @@ +[holomapping] +holosource="=>fixtures" +files = "**" +before = "*" diff --git a/.holo/branches/helm-chart/_laddr.toml b/.holo/branches/helm-chart/_laddr.toml new file mode 100644 index 00000000..a107bc70 --- /dev/null +++ b/.holo/branches/helm-chart/_laddr.toml @@ -0,0 +1,4 @@ +[holomapping] +holosource="=>helm-chart" +files = "**" +before = "*" diff --git a/.holo/sources/laddr.toml b/.holo/sources/laddr.toml index e3f020fe..eb6ab5fa 100644 --- a/.holo/sources/laddr.toml +++ b/.holo/sources/laddr.toml @@ -1,3 +1,3 @@ [holosource] url = "https://github.com/CodeForPhilly/laddr" -ref = "refs/tags/v3.0.1" +ref = "refs/tags/v3.0.3" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..cbe9c74b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,74 @@ +# This Dockerfile is hyper-optimized to minimize layer changes + +FROM jarvus/habitat-compose:latest as habitat + +ARG HAB_LICENSE=no-accept +ENV HAB_LICENSE=$HAB_LICENSE +ENV STUDIO_TYPE=Dockerfile +ENV HAB_ORIGIN=codeforphilly +RUN hab origin key generate + +# pre-layer all external runtime plan deps +COPY habitat/plan.sh /habitat/plan.sh +RUN hab pkg install \ + core/bash \ + emergence/php-runtime \ + $({ cat '/habitat/plan.sh' && echo && echo 'echo "${pkg_deps[@]/$pkg_origin\/*/}"'; } | hab pkg exec core/bash bash) \ + && hab pkg exec core/coreutils rm -rf /hab/cache/{artifacts,src}/ + +# pre-layer all external runtime composite deps +COPY habitat/composite/plan.sh /habitat/composite/plan.sh +RUN hab pkg install \ + jarvus/habitat-compose \ + emergence/nginx \ + $({ cat '/habitat/composite/plan.sh' && echo && echo 'echo "${pkg_deps[@]/$pkg_origin\/*/} ${composite_mysql_pkg}"'; } | hab pkg exec core/bash bash) \ + && hab pkg exec core/coreutils rm -rf /hab/cache/{artifacts,src}/ + + +FROM habitat as projector + +# pre-layer all build-time plan deps +RUN hab pkg install \ + core/hab-plan-build \ + jarvus/hologit \ + jarvus/toml-merge \ + $({ cat '/habitat/plan.sh' && echo && echo 'echo "${pkg_build_deps[@]/$pkg_origin\/*/}"'; } | hab pkg exec core/bash bash) \ + && hab pkg exec core/coreutils rm -rf /hab/cache/{artifacts,src}/ + +# pre-layer all build-time composite deps +RUN hab pkg install \ + jarvus/toml-merge \ + $({ cat '/habitat/composite/plan.sh' && echo && echo 'echo "${pkg_build_deps[@]/$pkg_origin\/*/}"'; } | hab pkg exec core/bash bash) \ + && hab pkg exec core/coreutils rm -rf /hab/cache/{artifacts,src}/ + +# build application +COPY . /src +ARG SITE_TREE +ENV SITE_TREE=$SITE_TREE +ARG SITE_VERSION +ENV SITE_VERSION=$SITE_VERSION +RUN hab pkg exec core/hab-plan-build hab-plan-build /src +RUN hab pkg exec core/hab-plan-build hab-plan-build /src/habitat/composite + + +FROM habitat as runtime + +# configure persistent volumes +RUN hab pkg exec core/coreutils mkdir -p '/hab/svc/mysql/data' '/hab/svc/codeforphilly/data' '/hab/svc/nginx/files' \ + && hab pkg exec core/coreutils chown hab:hab -R '/hab/svc/mysql/data' '/hab/svc/codeforphilly/data' '/hab/svc/nginx/files' + +# configure entrypoint +VOLUME ["/hab/svc/mysql/data", "/hab/svc/codeforphilly/data", "/hab/svc/nginx/files"] +ENTRYPOINT ["hab", "sup", "run"] +CMD ["codeforphilly/codeforphilly-composite"] + +# install .hart artifact from builder stage +COPY --from=projector /hab/cache/artifacts/$HAB_ORIGIN-* /hab/cache/artifacts/ +RUN hab pkg install /hab/cache/artifacts/$HAB_ORIGIN-* \ + && hab pkg exec core/coreutils rm -rf /hab/cache/{artifacts,src}/ + +# add source metadata to environment +ARG SOURCE_TAG +ENV SOURCE_TAG=$SOURCE_TAG +ARG SOURCE_COMMIT +ENV SOURCE_COMMIT=$SOURCE_COMMIT diff --git a/habitat/composite/default.toml b/habitat/composite/default.toml new file mode 100644 index 00000000..0ac11b57 --- /dev/null +++ b/habitat/composite/default.toml @@ -0,0 +1,2 @@ +[services.app.config] + default_timezone = "America/New_York" diff --git a/habitat/composite/plan.sh b/habitat/composite/plan.sh new file mode 100644 index 00000000..00b36161 --- /dev/null +++ b/habitat/composite/plan.sh @@ -0,0 +1,10 @@ +composite_app_pkg_name=codeforphilly +pkg_name="${composite_app_pkg_name}-composite" +pkg_origin=codeforphilly +pkg_maintainer="Code for Philly " +pkg_scaffolding=emergence/scaffolding-composite +composite_mysql_pkg=core/mysql + +pkg_version() { + scaffolding_detect_pkg_version +} diff --git a/habitat/default.toml b/habitat/default.toml new file mode 100644 index 00000000..7aa7bcd3 --- /dev/null +++ b/habitat/default.toml @@ -0,0 +1,2 @@ +[sites.default] +database = "codeforphilly" diff --git a/habitat/plan.sh b/habitat/plan.sh new file mode 100644 index 00000000..a329f724 --- /dev/null +++ b/habitat/plan.sh @@ -0,0 +1,8 @@ +pkg_name=codeforphilly +pkg_origin=codeforphilly +pkg_maintainer="Code for Philly " +pkg_scaffolding=emergence/scaffolding-site + +pkg_version() { + scaffolding_detect_pkg_version +}