Skip to content

Commit

Permalink
Circle 2.0 (2600hz#4650)
Browse files Browse the repository at this point in the history
* move circle config to 2.0 location

* fail if error log has errors

* address concern

* echo it then exit
  • Loading branch information
jamesaimonetti authored and lazedo committed Mar 13, 2018
1 parent 2f35988 commit a8bbad4
Show file tree
Hide file tree
Showing 14 changed files with 263 additions and 176 deletions.
125 changes: 125 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# This configuration was automatically generated from a CircleCI 1.0 config.
# It should include any build commands you had along with commands that CircleCI
# inferred from your project structure. We strongly recommend you read all the
# comments in this file to understand the structure of CircleCI 2.0, as the idiom
# for configuration has changed substantially in 2.0 to allow arbitrary jobs rather
# than the prescribed lifecycle of 1.0. In general, we recommend using this generated
# configuration as a reference rather than using it in production, though in most
# cases it should duplicate the execution of your original 1.0 config.
version: 2
jobs:
build:
working_directory: ~/2600hz/kazoo
shell: /bin/bash --login
# CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did.
# If any of these refer to each other, rewrite them so that they don't or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables .
environment:
CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
TZ: "/usr/share/zoneinfo/UTC"
# In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages.
# In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images.
# The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job.
# We have selected a pre-built image that mirrors the build environment we use on
# the 1.0 platform, but we recommend you choose an image more tailored to the needs
# of each job. For more information on choosing an image (or alternatively using a
# VM instead of a container) see https://circleci.com/docs/2.0/executor-types/
# To see the list of pre-built images that CircleCI provides for most common languages see
# https://circleci.com/docs/2.0/circleci-images/
docker:
- image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37
command: /sbin/init
- image: couchdb:2.1.1
- image: rabbitmq:3.7
- image: circleci/python:3.6.1

steps:
# Machine Setup
# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
# The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out.
- checkout
# Prepare for artifact and test results collection equivalent to how it was done on 1.0.
# In many cases you can simplify this from what is generated here.
# 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/'
- run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
# This is based on your 1.0 configuration file or project settings
- run:
working_directory: ~/2600hz/kazoo
command: echo -e "export OTP_VERSION=$(<~/2600hz/kazoo/make/erlang_version)\nexport PATH=${HOME}/.kerl/$OTP_VERSION/bin:${PATH}\n" >> $BASH_ENV
# - run:
# working_directory: ~/2600hz/kazoo
# command: 'sudo service rabbitmq-server status || sudo service rabbitmq-server
# start; sudo docker info >/dev/null 2>&1 || sudo service docker start; '
# Dependencies
# This would typically go in either a build or a build-and-test job when using workflows
# Restore the dependency cache
- restore_cache:
keys:
# This branch if available
- v1-dep-{{ .Branch }}-
# Default branch if not
- v1-dep-master-
# Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly
- v1-dep-
# This is based on your 1.0 configuration file or project settings
- run: echo -e "\n. ~/.kerl/$OTP_VERSION/activate\n" >> $BASH_ENV
- run:
command: bash ./scripts/circleci-build-erlang.sh
no_output_timeout: 1800s
- run: which ag >/dev/null 2>&1 || sudo apt-get update; sudo apt-get install silversearcher-ag
- run: sudo pip install --upgrade pip
- run: sudo pip install PyYAML mkdocs pyembed-markdown jsonschema
# Save dependency cache
- save_cache:
key: v1-dep-{{ .Branch }}-{{ epoch }}
paths:
# These cache paths were specified in the 1.0 config
- ~/.kerl
- ~/.local/
# Test
# This would typically be a build job when using workflows, possibly combined with build
# This is based on your 1.0 configuration file or project settings
- run: echo -e "\nexport CHANGED=\"$(git --no-pager diff --name-only HEAD origin/master -- applications core)\"\nexport CHANGED_SWAGGER=\"$(git --no-pager diff --name-only HEAD origin/master -- applications/crossbar/priv/api/swagger.json)\"\n" >> $BASH_ENV
- run: echo $CHANGED
- run: ./scripts/state-of-docs.sh || true
- run: ./scripts/code_checks.bash $($CHANGED)
- run: make fmt
- run: JOBS="2" make
- run: make code_checks
- run: make app_applications
- run: ./scripts/validate-js.sh $($CHANGED)
- run: make apis
- run: make docs
- run: make validate-schemas
- run: ./scripts/state-of-edoc.escript
- run: make xref
- run: make sup_completion
- run: |
if [[ ! -z "$($CHANGED)" ]]; then
make build-plt
TO_DIALYZE="$(echo $($CHANGED))" make dialyze
fi
- run: make elvis
- run: make build-ci-release
- run: ${PWD}/scripts/check-unstaged.bash
- run: KAZOO_CONFIG=${PWD}/rel/ci.config.ini REL="kazoo_apps" ACT="console" NODE_NAME_TYPE="-sname" make release
- run: |
if [[ $(grep -c -v -F 'exit with reason shutdown' ${PWD}/_rel/kazoo/log/error.log) -gt 0 ]]; then
cat ${PWD}/_rel/kazoo/log/error.log
exit 1
fi
# This is based on your 1.0 configuration file or project settings
- run: mkdir $CIRCLE_ARTIFACTS/logs
- run: mv ${PWD}/_rel/kazoo/log/* $CIRCLE_ARTIFACTS/logs/
- run: cp ${PWD}/rel/ci.relx.config $CIRCLE_ARTIFACTS/
- run: find ${PWD}/_rel/kazoo/releases -name kazoo.rel -exec cp {} $CIRCLE_ARTIFACTS/ \;
# Teardown
# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each
# Save test results
- store_test_results:
path: /tmp/circleci-test-results
# Save artifacts
- store_artifacts:
path: /tmp/circleci-artifacts
- store_artifacts:
path: /tmp/circleci-test-results
6 changes: 2 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ release: ACT ?= console # start | attach | stop | console | foreground
release: REL ?= kazoo_apps # kazoo_apps | ecallmgr | …
release: COOKIE ?= change_me
release:
@NODE_NAME="$(REL)" COOKIE="$(COOKIE)" $(ROOT)/scripts/dev/kazoo.sh $(ACT) "$$@"
NODE_NAME="$(REL)" COOKIE="$(COOKIE)" $(ROOT)/scripts/dev/kazoo.sh $(ACT) "$$@"

install: compile build-release
cp -a _rel/kazoo /opt
Expand Down Expand Up @@ -150,14 +150,12 @@ xref_release: TO_XREF = $(shell find $(ROOT)/_rel/kazoo/lib -name ebin)
xref_release:
@$(ROOT)/scripts/check-xref.escript $(TO_XREF)


sup_completion: sup_completion_file = $(ROOT)/sup.bash
sup_completion: kazoo
sup_completion:
@$(if $(wildcard $(sup_completion_file)), rm $(sup_completion_file))
@$(ROOT)/core/sup/priv/build-autocomplete.escript $(sup_completion_file) applications/ core/
@echo SUP Bash completion file written at $(sup_completion_file)


$(ELVIS):
wget 'https://github.com/inaka/elvis/releases/download/0.2.12/elvis' -O $@
chmod +x $@
Expand Down
5 changes: 4 additions & 1 deletion applications/crossbar/src/crossbar_maintenance.erl
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,10 @@ demote_account(AccountId) ->
%%------------------------------------------------------------------------------
-spec create_account(input_term(), input_term(), input_term(), input_term()) -> 'ok' | 'failed'.
create_account(AccountName, Realm, Username, Password)
when is_binary(AccountName), is_binary(Realm), is_binary(Username), is_binary(Password) ->
when is_binary(AccountName),
is_binary(Realm),
is_binary(Username),
is_binary(Password) ->
Account = kz_json:from_list([{<<"_id">>, kz_datamgr:get_uuid()}
,{<<"name">>, AccountName}
,{<<"realm">>, Realm}
Expand Down
65 changes: 0 additions & 65 deletions circle.yml

This file was deleted.

14 changes: 10 additions & 4 deletions core/kazoo_apps/src/kapps_controller.erl
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,14 @@ start_link() ->

-spec ready() -> boolean().
ready() ->
Configured = start_which_kapps(),
Running = [kz_term:to_binary(App) || App <- running_apps()],
lists:subtract(Configured, Running) =:= [].
Configured = [kz_term:to_binary(App) || App <- start_which_kapps()],
Running = [kz_term:to_binary(App) || App <- running_apps(), is_atom(App)],

0 =:= sets:size(
sets:subtract(sets:from_list(Configured)
,sets:from_list(Running)
)
).

-spec start_default_apps() -> [{atom(), 'ok' | {'error', any()}}].
start_default_apps() ->
Expand Down Expand Up @@ -151,7 +156,8 @@ maybe_start_from_env() ->
"noenv" -> 'false';
KazooApps ->
lager:info("starting applications specified in environment variable KAZOO_APPS: ~s"
,[KazooApps]),
,[KazooApps]
),
string:tokens(KazooApps, ", ")
end.

Expand Down
59 changes: 59 additions & 0 deletions core/kazoo_apps/src/kapps_maintenance.erl
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@

-export([init_system/0, init_dbs/0]).

-export([check_release/0]).

-include_lib("kazoo_caches/include/kazoo_caches.hrl").
-include("kazoo_apps.hrl").

Expand Down Expand Up @@ -1081,3 +1083,60 @@ init_system() ->
init_dbs(),
register_account_views(),
lager:notice("system initialized").

-spec check_release() -> 'ok' | 'error'.
check_release() ->
Checks = [fun kapps_started/0
,fun master_account_created/0
,fun migration_4_0_ran/0
,fun migration_ran/0
],
try lists:foreach(fun(F) -> F() end, Checks) of
'ok' -> lager:info("check_release/0 succeeded"), init:stop()
catch
'throw':Error ->
lager:error("check_release/0 failed: ~p", [Error]),
halt(1);
_E:_R ->
lager:error("check_release/0 crashed: ~s: ~p", [_E, _R]),
halt(1)
end.

-spec kapps_started() -> boolean().
kapps_started() ->
kapps_started(180 * ?MILLISECONDS_IN_SECOND).

-spec kapps_started(integer()) -> 'true'.
kapps_started(Timeout) when Timeout > 0 ->
kapps_controller:ready()
orelse begin
timer:sleep(100),
kapps_started(Timeout - 100)
end;
kapps_started(_Timeout) ->
lager:error("timed out waiting for kapps to start"),
throw({'error', 'timeout'}).

-spec master_account_created() -> 'true'.
master_account_created() ->
case rpc:call(node()
,'crossbar_maintenance'
,'create_account'
,[<<"compte_maitre">>
,<<"royaume">>
,<<"superduperuser">>
,<<"pwd!">>
]
)
of
'ok' -> 'true';
'failed' -> throw({'error', 'create_account'})
end.

-spec migration_4_0_ran() -> boolean().
migration_4_0_ran() ->
'no_return' =:= migrate_to_4_0().

-spec migration_ran() -> boolean().
migration_ran() ->
'no_return' =:= migrate().
2 changes: 1 addition & 1 deletion core/sup/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CLEAN_MOAR = clean-escript

all: compile $(ESCRIPT)

$(ESCRIPT):
$(ESCRIPT): src/sup.erl
@$(REBAR) escriptize

clean-escript:
Expand Down
Loading

0 comments on commit a8bbad4

Please sign in to comment.