diff --git a/.devcontainer/apt-packages.txt b/.devcontainer/apt-packages.txt deleted file mode 100644 index a962a42..0000000 --- a/.devcontainer/apt-packages.txt +++ /dev/null @@ -1,11 +0,0 @@ -coreutils -direnv -figlet -findutils -gh -git -links -mawk -sed -time -vim diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e6f4704..fa688c6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -45,10 +45,7 @@ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile "image": "mcr.microsoft.com/devcontainers/base:jammy", - "postCreateCommand": "time pip install -r .devcontainer/requirements.txt && time pipx install --include-deps --force ansible && time pipx inject ansible -r .devcontainer/requirements-ansible.txt && time pre-commit install", - // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "vscode", - // Note: Python dependencies can be added in the `requirements.txt` file. - "onCreateCommand": "sudo apt update && xargs -a .devcontainer/apt-packages.txt sudo apt-get install -y" + "onCreateCommand": "sudo apt-get update && sudo apt-get install -y ansible && ansible-playbook .devcontainer/provision.yml" } diff --git a/.devcontainer/provision.yml b/.devcontainer/provision.yml new file mode 100644 index 0000000..54e13f5 --- /dev/null +++ b/.devcontainer/provision.yml @@ -0,0 +1,85 @@ +--- +# Ansible playbook file. +# Usage: ansible-playbook .devcontainer/provision.yml +# Note: Keep keys and lists in alphabetical order. +- name: Provision dev container + hosts: localhost + connection: local + become: true + vars: + apt_packages: + - coreutils + - direnv + - figlet + - findutils + - gh + - git + - links + - mawk + - sed + - time + - vim + ansible_python_requirements: + - docker>=7.1 + - requests==2.32.5 + + tasks: + - name: Update apt cache + ansible.builtin.apt: + update_cache: true + + - name: Install apt packages + ansible.builtin.apt: + name: "{{ apt_packages }}" + state: present + + - name: Install python requirements + ansible.builtin.pip: + requirements: "{{ playbook_dir }}/requirements.txt" + state: present + + - name: Install ansible via pipx + ansible.builtin.command: pipx install --include-deps --force ansible + become: false + register: pipx_install + changed_when: "'already installed' not in pipx_install.stderr" + failed_when: pipx_install.rc != 0 and 'already installed' not in pipx_install.stderr + + - name: Check ansible python requirements already injected + ansible.builtin.command: "pipx runpip ansible show {{ item }}" + loop: "{{ ansible_python_requirements }}" + register: pipx_injected + become: false + failed_when: false + changed_when: false + + - name: Inject ansible python requirements + ansible.builtin.command: "pipx inject ansible {{ item }}" + loop: "{{ ansible_python_requirements }}" + loop_control: + index_var: req_index + when: pipx_injected.results[req_index].rc != 0 + become: false + changed_when: true + + - name: Check if requirements.yml exists + ansible.builtin.stat: + path: "{{ playbook_dir }}/../requirements.yml" + register: requirements_yml + become: false + + - name: Install ansible collections + ansible.builtin.command: ansible-galaxy collection install -r requirements.yml + args: + chdir: "{{ playbook_dir }}/.." + become: false + register: galaxy_result + when: requirements_yml.stat.exists + changed_when: "'Nothing to do' not in galaxy_result.stdout" + + - name: Install pre-commit hooks + ansible.builtin.command: pre-commit install + args: + chdir: "{{ playbook_dir }}/.." + creates: .git/hooks/pre-commit + become: false diff --git a/.devcontainer/requirements-ansible.txt b/.devcontainer/requirements-ansible.txt deleted file mode 100644 index 9fe8088..0000000 --- a/.devcontainer/requirements-ansible.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Python packages injected into the pipx-managed Ansible environment. -# Keep dependencies sorted alphabetically. -docker>=7.1 -requests==2.32.5 diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index f322f5d..89a5247 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -4,7 +4,11 @@ name: Check # yamllint disable-line rule:truthy on: pull_request: + paths-ignore: + - '.devcontainer/**' push: + paths-ignore: + - '.devcontainer/**' schedule: - cron: 0 0 * * 1 # Run every Monday at 00:00 UTC workflow_call: