195 lines
6.3 KiB
YAML
195 lines
6.3 KiB
YAML
- name: Clone BlockScout
|
|
git:
|
|
repo: "{{ blockscout_repo }}"
|
|
dest: "blockscout-{{ chain }}"
|
|
version: "{{ chain_branch[chain] }}"
|
|
force: true
|
|
when: skip_fetch | bool != true
|
|
|
|
- name: Git clean
|
|
command: "git clean -fdx"
|
|
args:
|
|
chdir: "blockscout-{{ chain }}"
|
|
when: skip_fetch | bool != true
|
|
|
|
- name: Merge branches
|
|
command: "git merge {{ chain_merge_commit[chain] }}"
|
|
args:
|
|
chdir: "blockscout-{{ chain }}"
|
|
when: skip_fetch | bool != true and chain_merge_commit_item != 'false'
|
|
vars:
|
|
chain_mc: "{{ chain_merge_commit | default({}) }}"
|
|
chain_merge_commit_item: "{{ chain_mc[chain] | default('false') }}"
|
|
|
|
- name: Copy web config files
|
|
copy:
|
|
src: "blockscout-{{ chain }}/apps/block_scout_web/config/dev.secret.exs.example"
|
|
dest: "blockscout-{{ chain }}/apps/block_scout_web/config/dev.secret.exs"
|
|
|
|
- name: Template explorer config files
|
|
template:
|
|
src: dev.secret.exs.j2
|
|
dest: "blockscout-{{ chain }}/apps/explorer/config/dev.secret.exs"
|
|
|
|
- name: Remove static assets from previous deployment, if any
|
|
file:
|
|
path: "blockscout-{{ chain }}/apps/block_scout_web/priv/static"
|
|
state: absent
|
|
|
|
- name: Compile BlockScout
|
|
command: "mix do {{ item }}"
|
|
args:
|
|
chdir: "blockscout-{{ chain }}"
|
|
with_items:
|
|
- deps.get
|
|
- local.rebar --force
|
|
- deps.compile
|
|
- compile
|
|
- ecto.drop
|
|
- ecto.create
|
|
- ecto.migrate
|
|
|
|
- name: Install Node modules at apps/block_scout_web/assets
|
|
command: npm install
|
|
args:
|
|
chdir: "blockscout-{{ chain }}/apps/block_scout_web/assets"
|
|
|
|
- name: Execute webpack.js at apps/block_scout_web/assets/node_modules/webpack/bin
|
|
command: node_modules/webpack/bin/webpack.js --mode production
|
|
args:
|
|
chdir: "blockscout-{{ chain }}/apps/block_scout_web/assets"
|
|
|
|
- name: Instal Node modules at apps/explorer
|
|
command: npm install
|
|
args:
|
|
chdir: "blockscout-{{ chain }}/apps/explorer"
|
|
|
|
- name: Install SSL certificates
|
|
command: mix phx.gen.cert blockscout blockscout.local
|
|
args:
|
|
chdir: "blockscout-{{ chain }}/apps/block_scout_web"
|
|
|
|
- name: Fetch environment variables
|
|
set_fact:
|
|
chain_env: "{{ lookup('aws_ssm', path, aws_access_key=aws_access_key, aws_secret_key=aws_secret_key, region=region, shortnames=true, bypath=true, recursive=true ) }}"
|
|
vars:
|
|
path: "/{{ prefix }}/{{ chain }}"
|
|
|
|
- name: Override env variables
|
|
set_fact:
|
|
chain_env: "{{ chain_env | combine(chain_custom_environment_chain) }}"
|
|
vars:
|
|
chain_custom_environment_chain: "{{ chain_cec[chain] | default({}) }}"
|
|
chain_cec: "{{ chain_custom_environment | default ({}) }}"
|
|
|
|
- name: Uppercase chain
|
|
set_fact:
|
|
chain_upper_env: "{{ chain_upper_env | combine ({item.key|upper : item.value}) }}"
|
|
with_dict: "{{ chain_env }}"
|
|
vars:
|
|
chain_upper_env: {}
|
|
|
|
- name: Start server
|
|
block:
|
|
- name: Start server
|
|
command: "mix phx.server"
|
|
environment: "{{ chain_upper_env | combine({'NETWORK_PATH':'/'}) }}"
|
|
ignore_errors: true
|
|
args:
|
|
chdir: "blockscout-{{ chain }}"
|
|
async: 10000
|
|
poll: 0
|
|
|
|
- name: User prompt
|
|
pause:
|
|
prompt: "Please, open your browser and open 4000 port at the machine were Ansible is currently run. BlockScout should appear. Ensure that there is no visual artifacts and then press Enter to continue. Press Ctrl+C and then A if you face any issues to cancel the deployment."
|
|
rescue:
|
|
- name: 'Stop execution'
|
|
fail:
|
|
msg: "Execution aborted."
|
|
always:
|
|
- name: kill server
|
|
command: "pkill -e {{ item }}"
|
|
with_items:
|
|
- beam.smp
|
|
- node
|
|
failed_when: false
|
|
|
|
- name: Build static assets
|
|
command: mix phx.digest
|
|
args:
|
|
chdir: "blockscout-{{ chain }}"
|
|
|
|
- name: User prompt
|
|
pause:
|
|
prompt: "Would you like to remove staging dependencies? [Yes/No] Default: Yes"
|
|
register: user_answer
|
|
|
|
- name: Remove dev dependencies
|
|
file:
|
|
state: absent
|
|
path: "{{ item }}"
|
|
with_items:
|
|
- "blockscout-{{ chain }}/_build/"
|
|
- "blockscout-{{ chain }}/deps/"
|
|
- "blockscout-{{ chain }}/apps/block_scout_web/assets/node_modules/"
|
|
- "blockscout-{{ chain }}/apps/explorer/node_modules/"
|
|
- "blockscout-{{ chain }}/logs/dev/"
|
|
when: user_answer.user_input|default(true)|bool != false
|
|
|
|
- name: Fix bug with favicon
|
|
copy:
|
|
src: "{{ item }}"
|
|
dest: "blockscout-{{ chain }}/apps/block_scout_web/priv/static/images/"
|
|
with_fileglob:
|
|
- "blockscout-{{ chain }}/apps/block_scout_web/priv/static/favicon*"
|
|
|
|
- name: Upload Blockscout to S3
|
|
command: "aws deploy push --application-name={{ prefix }}-explorer --s3-location s3://{{ prefix }}-explorer-codedeploy-releases/blockscout-{{ chain }}.zip --source=blockscout-{{ chain }}"
|
|
register: push_output
|
|
environment:
|
|
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
|
|
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
|
|
AWS_REGION: "{{ region }}"
|
|
|
|
- name: Upload output
|
|
debug:
|
|
msg: "If deployment will fail, you can try to deploy blockscout manually using the following commands: {{ push_output.stdout_lines }}"
|
|
|
|
- name: User prompt
|
|
pause:
|
|
prompt: "Do you want to update the Parameter Store variables? [Yes/No] Default: Yes"
|
|
register: user_answer
|
|
|
|
- name: Prepare variables for Parameter Store
|
|
set_fact:
|
|
chain_lower_env: "{{ chain_lower_env | combine ({item.key|lower : item.value}) }}"
|
|
with_dict: "{{ chain_upper_env }}"
|
|
vars:
|
|
chain_lower_env: {}
|
|
when: user_answer.user_input|default(true)|bool != false
|
|
|
|
- name: Update chain variables
|
|
aws_ssm_parameter_store:
|
|
name: "/{{ prefix }}/{{ chain }}/{{ item.key }}"
|
|
value: "{{ item.value }}"
|
|
with_dict: "{{ chain_lower_env }}"
|
|
environment:
|
|
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
|
|
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
|
|
AWS_REGION: "{{ region }}"
|
|
when: user_answer.user_input|default(true)|bool != false
|
|
|
|
- name: User prompt
|
|
pause:
|
|
prompt: "Do you want to deploy BlockScout? [Yes/No] Default: Yes"
|
|
register: user_answer
|
|
|
|
- name: Deploy Blockscout
|
|
command: "{{ push_output.stdout_lines[1] }} --deployment-group-name {{ prefix }}-explorer-dg{{ index }} --deployment-config-name CodeDeployDefault.OneAtATime --description '{{ chain_upper_env['BLOCKSCOUT_VERSION'] }}'"
|
|
when: user_answer.user_input|default(true)|bool != false
|
|
environment:
|
|
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
|
|
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
|
|
AWS_REGION: "{{ region }}"
|