diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..7ac7c736 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,156 @@ +--- + +# run setting up dotfiles using ansible in a CI server. +# This is to check if the dotfiles are being setup properly without issues. +# +# Obtained from https://github.com/geerlingguy/mac-dev-playbook/blob/master/.github/workflows/ci.yml + +name: CI +'on': + pull_request: + push: + branches: + - master + schedule: + - cron: "0 5 * * 4" + +env: + FORCE_COLOR: true # display terminal colors + +jobs: + + # lint: + # name: Lint + # runs-on: ubuntu-latest + # steps: + # - name: Check out the codebase. + # uses: actions/checkout@v4 + # + # - name: Set up Python 3. + # uses: actions/setup-python@v5 + # with: + # python-version: '3.x' + # + # - name: Install test dependencies. + # run: pip3 install yamllint ansible ansible-lint + # + # - name: Lint code using yamllint + # run: yamllint -c .yamllint . + # + # - name: Lint ansible code using ansible-lint + # run: ansible-lint -c .ansible-lint . + + integration: + name: Integration + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + # - os: macos-latest + # runCommand: "./dotfiles macos" + # playbook: macos + # - os: macos-12 + # runCommand: "./dotfiles macos" + # playbook: macos + # - os: ubuntu-latest + # runCommand: "./dotfiles wsl-ubuntu" + # playbook: wsl-ubuntu + - os: ubuntu-22.04 + runCommand: "./dotfiles wsl-ubuntu" + playbook: wsl-ubuntu + + steps: + - name: Check out the codebase. + uses: actions/checkout@v4 + + - name: Uninstall GitHub Actions' built-in Homebrew. + if: startsWith(matrix.os, 'macos') + run: | + # Download and run the uninstall script. + curl -sLO https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh ; + chmod +x ./uninstall.sh ; + sudo ./uninstall.sh --force ; + # Clean up Homebrew directories. + sudo rm -rf /usr/local/Homebrew ; + sudo rm -rf /usr/local/Caskroom ; + sudo rm -rf /usr/local/bin/brew ; + + - name: Uninstall GitHub Actions' built-in browser installs. + if: startsWith(matrix.os, 'macos') + run: | + sudo rm -rf /Applications/Firefox.app + sudo rm -rf /Applications/Google\ Chrome.app + sudo rm -rf /usr/local/bin/firefox + + - name: Setup locales + if: startsWith(matrix.os, 'ubuntu') + run: | + export LANG=en_CA.UTF-8 + export LC_ALL=en_CA.UTF-8 + sudo locale-gen "en_CA.UTF-8" + sudo dpkg-reconfigure locales + + - name: Install ansible + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + sudo pip3 install --upgrade pip ; + sudo pip3 install ansible ; + + - name: Set up the test environment. + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + ansible-galaxy install -r requirements.yaml + # cp tests/ansible.cfg ./ansible.cfg + # cp tests/inventory ./inventory + # cp tests/config.yml ./config.yml + + - name: view ansible basic info + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + ansible --version + + - name: print env + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + env + + - name: print directory + run: | + pwd + ls -lah + + - name: echo ANSIBLE_HOME + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + echo "$ANSIBLE_HOME" + + - name: where ansible + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + which ansible + + # - name: Check the playbook's syntax. + # run: ANSIBLE_CONFIG=./ansible.cfg ansible-playbook playbooks/${{ matrix.playbook }}.yaml --syntax-check + + - name: Test the playbook. + # run: ./dotfiles ${{ matrix.playbook }} + run: | + source tools/zsh/.zshenv ; + source tools/zsh/exports.zsh ; + DOTDIR=/home/runner/work/dotfiles ANSIBLE_CONFIG=./ansible.cfg ansible-playbook playbooks/${{ matrix.playbook }}.yaml + env: + ANSIBLE_FORCE_COLOR: '1' + + # - name: Idempotence check. + # run: | + # idempotence=$(mktemp) + # ansible-playbook main.yml | tee -a ${idempotence} + # tail ${idempotence} | grep -q 'changed=0.*failed=0' && (echo 'Idempotence test: pass' && exit 0) || (echo 'Idempotence test: fail' && exit 1) + # env: + # ANSIBLE_FORCE_COLOR: '1'