From 4a938c367e7f6ea45145bb6ac3a5e70852231a1b Mon Sep 17 00:00:00 2001 From: Brett Logan Date: Tue, 22 Feb 2022 10:20:50 -0500 Subject: [PATCH] Add workflow for Python updates --- .github/scripts/update-python.sh | 76 +++++++++++++++++++++++++++++++ .github/workflows/deps-python.yml | 15 ++++++ 2 files changed, 91 insertions(+) create mode 100755 .github/scripts/update-python.sh create mode 100644 .github/workflows/deps-python.yml diff --git a/.github/scripts/update-python.sh b/.github/scripts/update-python.sh new file mode 100755 index 00000000..b3a7ebb5 --- /dev/null +++ b/.github/scripts/update-python.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +################################################################################ +########################### Install Python Dependancies ######################## +################################################################################ + +##################### +# Set fail on error # +##################### +set -euo pipefail + +############################ +# Create staging directory # +############################ +mkdir -p /venvs + +######################################## +# Install basic libs to run installers # +######################################## +pip install virtualenv + +######################################################### +# Itterate through requirments.txt to install bainaries # +######################################################### +cd dependencies/python +for DEP_FILE in *.txt; do + # split the package name from its version + PACKAGE_NAME=${DEP_FILE%.txt} + echo "-------------------------------------------" + mkdir -p "/venvs/${PACKAGE_NAME}" + echo "Generating virtualenv for: [${PACKAGE_NAME}]" + pushd "/venvs/${PACKAGE_NAME}" + # Enable virtualenv + virtualenv . + # Activate virtualenv + source bin/activate + # Handle the ansibl-lint corner case + if [[ "$PACKAGE_NAME" == "ansible-lint" ]]; then + pip install "ansible-lint[core]" + else + pip install "${PACKAGE_NAME}" + fi + # Generate an update requirements.txt + pip freeze > requirements.txt + # deactivate the python virtualenv + deactivate + # pop the stack + popd + # Remove old lockfile + rm -rf "$DEP_FILE" + # Create new lockfile + mv "/venvs/${PACKAGE_NAME}/requirements.txt" "${DEP_FILE}" +done + +git status + +# Setup Git Config +echo "Configuring Git..." +git config --global user.email "noreply@github.com" +git config --global user.name "Super-Linter Automation" + +if [[ $(git status --porcelain) ]]; then + # Push changes to remote + echo "Pushing changes to remote..." + git add . + git commit -a -Ss -m "Update Python dependencies" + # shellcheck disable=SC2154 + git checkout -b "python_deps_${id}" + # shellcheck disable=SC2154 + git push origin "python_deps_${id}" + + # Open pull request + echo "Opening pull request..." + gh pr create --title "Weekly Python Updates" --body "Updates Python dependencies" --base master --head "python_deps_${id}" +else + echo "No changes to commit" +fi diff --git a/.github/workflows/deps-python.yml b/.github/workflows/deps-python.yml new file mode 100644 index 00000000..4cde252a --- /dev/null +++ b/.github/workflows/deps-python.yml @@ -0,0 +1,15 @@ +name: Update Deps - Python +on: + schedule: + # Sunday at 5:00pm + - cron: "0 17 * * 0" + workflow_dispatch: +jobs: + update: + name: Update Python Dependencies + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: ./.github/scripts/update-python.sh + env: + id: ${{ github.run_id }}