diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 3a4036301..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,44 +0,0 @@ -version: 2 - -terraform: &terraform - docker: - - image: hashicorp/terraform:0.12.21 - working_directory: /tmp/workspace/terraform - -jobs: - validate: - <<: *terraform - steps: - - checkout -# - run: -# name: Add github.com to ~/.ssh/known_hosts -# command: mkdir ~/.ssh && ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - - run: - name: terraform init - command: find . -type f -name "*.tf" -exec dirname {} \;|sort -u | while read m; do (cd "$m" && terraform init -input=false -backend=false) || exit 1; done - - run: - name: Validate Terraform configurations - command: find . -name ".terraform" -prune -o -type f -name "*.tf" -exec dirname {} \;|sort -u | while read m; do (cd "$m" && terraform validate && echo "√ $m") || exit 1 ; done - environment: - AWS_DEFAULT_REGION: us-east-1 - - run: - name: Check if Terraform configurations are properly formatted - command: if [[ -n "$(terraform fmt -write=false)" ]]; then echo "Some terraform files need be formatted, run 'terraform fmt' to fix"; exit 1; fi - - run: - name: Install tflint - command: wget -O /tmp/tflint.zip https://github.com/wata727/tflint/releases/download/v0.20.2/tflint_linux_amd64.zip && unzip /tmp/tflint.zip -d /usr/local/bin - - run: - name: Check Terraform configurations with tflint - command: tflint - - persist_to_workspace: - root: . - paths: . - -workflows: - version: 2 - build: - jobs: - - validate -# - plan_examples -# - approve -# - release diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 000000000..73c2bee20 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,62 @@ +name: Pre-Commit + +on: + pull_request: + push: + branches: + - master + +jobs: + getBaseVersion: + name: Get min/max versions + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Terraform min/max versions + id: minMax + uses: clowdhaus/terraform-min-max@v1.0.1 + outputs: + minVersion: ${{ steps.minMax.outputs.minVersion }} + maxVersion: ${{ steps.minMax.outputs.maxVersion }} + + preCommit: + name: Pre-commit check + runs-on: ubuntu-latest + needs: getBaseVersion + strategy: + fail-fast: false + matrix: + version: + - ${{ needs.getBaseVersion.outputs.minVersion }} + - ${{ needs.getBaseVersion.outputs.maxVersion }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Python + uses: actions/setup-python@v2 + + - name: Install Terraform v${{ matrix.version }} + uses: hashicorp/setup-terraform@v1 + with: + terraform_version: ${{ matrix.version }} + + - name: Install pre-commit dependencies + run: | + pip install pre-commit + curl -L "$(curl -s https://api.github.com/repos/terraform-docs/terraform-docs/releases/latest | grep -o -E "https://.+?-linux-amd64" | head -n1)" > terraform-docs && chmod +x terraform-docs && sudo mv terraform-docs /usr/bin/ + curl -L "$(curl -s https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" > tflint.zip && unzip tflint.zip && rm tflint.zip && sudo mv tflint /usr/bin/ + + - name: Execute pre-commit + # Run only validate pre-commit check on min version supported + if: ${{ matrix.version == needs.getBaseVersion.outputs.minVersion }} + run: pre-commit run --color=always --show-diff-on-failure --all-files terraform_validate + + - name: Execute pre-commit + # Run all pre-commit checks on max version supported + if: ${{ matrix.version == needs.getBaseVersion.outputs.maxVersion }} + run: pre-commit run --color=always --show-diff-on-failure --all-files