Skip to content

Install requirements #40

Install requirements

Install requirements #40

Workflow file for this run

name: Deploy stack
on:
push:
branches:
- main
permissions:
id-token: write
contents: read
jobs:
changes:
runs-on: ubuntu-latest
outputs:
terraform: ${{ steps.filter.outputs.terraform }}
ansible: ${{ steps.filter.outputs.ansible }}
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
terraform:
- 'terraform-infra/**'
ansible:
- 'ansible/**'
terraform:
needs: changes
if: ${{ needs.changes.outputs.terraform == 'true' }}
runs-on: ubuntu-latest
env:
TF_VAR_do_token: ${{ secrets.DIGITALOCEAN_API_TOKEN }}
TF_VAR_ssh_key_name: ${{ vars.DO_KEY_NAME }}
TF_TOKEN_app_terraform_io: ${{ secrets.HCP_TERRAFORM_TOKEN }}
TF_FORCE_LOCAL_BACKEND: 1
SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY_ID }}
SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_ACCESS_KEY }}
defaults:
run:
working-directory: terraform-infra
steps:
- name: Checkout
uses: actions/checkout@v4
- name: HashiCorp - Setup Terraform
uses: hashicorp/setup-terraform@v3.1.2
- run: terraform init
- run: terraform validate -no-color
- run: terraform apply -no-color --auto-approve
ansible:
needs:
- changes
- terraform
if: >-
${{
(always() && (needs.terraform.result == 'success' || needs.terraform.result == 'skipped') && needs.changes.outputs.ansible == 'true' )
}}
runs-on: ubuntu-latest
env:
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_API_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
roles:
- 'ansible/roles/**'
list-files: json
- name: Get changed roles
id: roles
if: ${{ steps.filter.outputs.roles == 'true' }}
run: |
changed_roles=$(echo '${{ steps.filter.outputs.roles_files }}' | jq -r '[.[] | split("/")[2]] | sort | unique | join(",")')
echo "Changed roles: $changed_roles"
echo "changed_roles=$changed_roles" >> $GITHUB_OUTPUT
- name: Run ansible
if: ${{ steps.filter.outputs.roles == 'true' }}
uses: dawidd6/action-ansible-playbook@v2.8.0
env:
ANSIBLE_TIMEOUT: 60
DO_SPACES_ACCESS_ID: ${{ secrets.DO_SPACES_ACCESS_ID }}
DO_SPACES_ACCESS_KEY: ${{ secrets.DO_SPACES_ACCESS_KEY }}
with:
playbook: setup.yaml
directory: ansible
key: ${{ secrets.SSH_PRIV_KEY }}
options: |
--inventory inventory_digitalocean.yaml
--tags "${{ steps.roles.outputs.changed_roles }}"