|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -e; |
| 4 | + |
| 5 | +if [[ -z "${ACTIONS_RUNTIME_URL}" ]]; then |
| 6 | + echo "::error::ACTIONS_RUNTIME_URL is missing. Uploading artifacts won't work without it. See https://github.com/KOLANICH-GHActions/passthrough-restricted-actions-vars and https://github.com/KOLANICH-GHActions/node_based_cmd_action_template"; |
| 7 | + exit 1; |
| 8 | +fi; |
| 9 | + |
| 10 | +if [[ -z "${ACTIONS_RUNTIME_TOKEN}" ]]; then |
| 11 | + echo "::error::ACTIONS_RUNTIME_TOKEN is missing. Uploading artifacts won't work without it. See https://github.com/KOLANICH-GHActions/passthrough-restricted-actions-vars and https://github.com/KOLANICH-GHActions/node_based_cmd_action_template"; |
| 12 | + exit 1; |
| 13 | +fi; |
| 14 | + |
| 15 | +NEED_PYTEST=$1; |
| 16 | +SHOULD_ISOLATE_TESTING=$2; |
| 17 | + |
| 18 | +THIS_SCRIPT_DIR=`dirname "${BASH_SOURCE[0]}"`; # /home/runner/work/_actions/KOLANICH-GHActions/typical-python-workflow/master |
| 19 | +echo "This script is $THIS_SCRIPT_DIR"; |
| 20 | +THIS_SCRIPT_DIR=`realpath "${THIS_SCRIPT_DIR}"`; |
| 21 | +echo "This script is $THIS_SCRIPT_DIR"; |
| 22 | +ACTIONS_DIR=`realpath "$THIS_SCRIPT_DIR/../../.."`; |
| 23 | + |
| 24 | +ISOLATE="${THIS_SCRIPT_DIR}/isolate.sh"; |
| 25 | + |
| 26 | +AUTHOR_NAMESPACE=KOLANICH-GHActions; |
| 27 | + |
| 28 | +SETUP_ACTION_REPO=$AUTHOR_NAMESPACE/setup-python; |
| 29 | +GIT_PIP_ACTION_REPO=$AUTHOR_NAMESPACE/git-pip; |
| 30 | +APT_ACTION_REPO=$AUTHOR_NAMESPACE/apt; |
| 31 | +COVERAGEPY_ACTION_REPO=$AUTHOR_NAMESPACE/coveragepyReport; |
| 32 | +CHECKOUT_ACTION_REPO=$AUTHOR_NAMESPACE/checkout; |
| 33 | + |
| 34 | +SETUP_ACTION_DIR=$ACTIONS_DIR/$SETUP_ACTION_REPO/master; |
| 35 | +GIT_PIP_ACTION_DIR=$ACTIONS_DIR/$GIT_PIP_ACTION_REPO/master; |
| 36 | +APT_ACTION_DIR=$ACTIONS_DIR/$APT_ACTION_REPO/master; |
| 37 | +COVERAGEPY_ACTION_DIR=$ACTIONS_DIR/$COVERAGEPY_ACTION_REPO/master; |
| 38 | +CHECKOUT_ACTION_DIR=$ACTIONS_DIR/$CHECKOUT_ACTION_REPO/master; |
| 39 | + |
| 40 | +if [ -d "$CHECKOUT_ACTION_DIR" ]; then |
| 41 | + : |
| 42 | +else |
| 43 | + $ISOLATE git clone --depth=1 https://github.com/$CHECKOUT_ACTION_REPO $CHECKOUT_ACTION_DIR; |
| 44 | +fi; |
| 45 | + |
| 46 | +if [ -d "$SETUP_ACTION_DIR" ]; then |
| 47 | + : |
| 48 | +else |
| 49 | + $ISOLATE bash "$CHECKOUT_ACTION_DIR/action.sh" "$SETUP_ACTION_REPO" "" "$SETUP_ACTION_DIR" 1 0; |
| 50 | +fi; |
| 51 | + |
| 52 | +if [ -d "$GIT_PIP_ACTION_DIR" ]; then |
| 53 | + : |
| 54 | +else |
| 55 | + $ISOLATE bash "$CHECKOUT_ACTION_DIR/action.sh" "$GIT_PIP_ACTION_REPO" "" "$GIT_PIP_ACTION_DIR" 1 0; |
| 56 | +fi; |
| 57 | + |
| 58 | +if [ -d "$APT_ACTION_DIR" ]; then |
| 59 | + : |
| 60 | +else |
| 61 | + $ISOLATE bash "$CHECKOUT_ACTION_DIR/action.sh" "$APT_ACTION_REPO" "" "$APT_ACTION_DIR" 1 0; |
| 62 | +fi; |
| 63 | + |
| 64 | +bash $SETUP_ACTION_DIR/action.sh $NEED_PYTEST; |
| 65 | + |
| 66 | + |
| 67 | +$ISOLATE bash "$CHECKOUT_ACTION_DIR/action.sh" "$GITHUB_REPOSITORY" "$GITHUB_SHA" "$GITHUB_WORKSPACE" 1 1; |
| 68 | + |
| 69 | +BEFORE_DEPS_COMMANDS_FILE="$GITHUB_WORKSPACE/.ci/beforeDeps.sh"; |
| 70 | +if [ -f "$BEFORE_DEPS_COMMANDS_FILE" ]; then |
| 71 | + echo "##[group] Running before deps commands"; |
| 72 | + . $BEFORE_DEPS_COMMANDS_FILE ; |
| 73 | + echo "##[endgroup]"; |
| 74 | +fi; |
| 75 | + |
| 76 | +echo "##[group] Installing dependencies"; |
| 77 | +bash $APT_ACTION_DIR/action.sh $GITHUB_WORKSPACE/.ci/aptPackagesToInstall.txt; |
| 78 | +bash $GIT_PIP_ACTION_DIR/action.sh $GITHUB_WORKSPACE/.ci/pythonPackagesToInstallFromGit.txt; |
| 79 | +echo "##[endgroup]"; |
| 80 | + |
| 81 | +echo "##[group] Getting package name"; |
| 82 | +PACKAGE_NAME=`$ISOLATE python3 $THIS_SCRIPT_DIR/getPackageName.py $GITHUB_WORKSPACE`; |
| 83 | +echo "##[endgroup]"; |
| 84 | + |
| 85 | +cd "$GITHUB_WORKSPACE"; |
| 86 | + |
| 87 | +BEFORE_BUILD_COMMANDS_FILE="$GITHUB_WORKSPACE/.ci/beforeBuild.sh"; |
| 88 | +if [ -f "$BEFORE_BUILD_COMMANDS_FILE" ]; then |
| 89 | + echo "##[group] Running before build commands"; |
| 90 | + . $BEFORE_BUILD_COMMANDS_FILE; |
| 91 | + echo "##[endgroup]"; |
| 92 | +fi; |
| 93 | + |
| 94 | +echo "##[group] Building the main package"; |
| 95 | +$ISOLATE python3 -m build -xnw .; |
| 96 | +PACKAGE_FILE_NAME=$PACKAGE_NAME-0.CI-py3-none-any.whl; |
| 97 | +PACKAGE_FILE_PATH=./dist/$PACKAGE_FILE_NAME; |
| 98 | +mv ./dist/*.whl $PACKAGE_FILE_PATH; |
| 99 | +echo "##[endgroup]"; |
| 100 | + |
| 101 | +echo "##[group] Installing the main package"; |
| 102 | +$ISOLATE sudo pip3 install --upgrade $PACKAGE_FILE_PATH; |
| 103 | +#$ISOLATE sudo pip3 install --upgrade -e $GITHUB_WORKSPACE; |
| 104 | +echo "##[endgroup]"; |
| 105 | + |
| 106 | +#if [ "$GITHUB_REPOSITORY_OWNER" == "$GITHUB_ACTOR" ]; then |
| 107 | + if [ "$GITHUB_EVENT_NAME" == "push" ]; then |
| 108 | + echo "##[group] Uploading built wheels"; |
| 109 | + python3 -m miniGHAPI artifact --name=$PACKAGE_FILE_NAME $PACKAGE_FILE_PATH; |
| 110 | + echo "##[endgroup]"; |
| 111 | + else |
| 112 | + echo "Not uploading, event is $GITHUB_EVENT_NAME, not push"; |
| 113 | + fi; |
| 114 | +#else |
| 115 | +# echo "Not uploading, not owner, owner is $GITHUB_REPOSITORY_OWNER , you are $GITHUB_ACTOR"; |
| 116 | +#fi |
| 117 | + |
| 118 | +TESTS_DIR=$GITHUB_WORKSPACE/tests; |
| 119 | +if [[ -d "$TESTS_DIR/" ]]; then |
| 120 | + if [ $SHOULD_ISOLATE_TESTING ]; then |
| 121 | + ISOLATE_TESTING=""; |
| 122 | + else |
| 123 | + ISOLATE_TESTING=$ISOLATE; |
| 124 | + fi |
| 125 | + if [ $NEED_PYTEST ]; then |
| 126 | + echo "##[group] testing with pytest and computing coverage"; |
| 127 | + $ISOLATE_TESTING coverage run --branch --source=$PACKAGE_NAME -m pytest --junitxml=./rspec.xml $TESTS_DIR/*.py; |
| 128 | + python3 -m miniGHAPI artifact --name=rspec.xml rspec.xml; |
| 129 | + else |
| 130 | + echo "##[group] testing without pytest and computing coverage"; |
| 131 | + $ISOLATE_TESTING coverage run --branch --source=$PACKAGE_NAME $TESTS_DIR/*.py; |
| 132 | + echo "for rspec.xml you would need pytest"; |
| 133 | + fi; |
| 134 | + echo "##[endgroup]"; |
| 135 | + |
| 136 | + if [[ -n "${INPUT_GITHUB_TOKEN}" ]]; then |
| 137 | + |
| 138 | + if [ -d "$COVERAGEPY_ACTION_DIR" ]; then |
| 139 | + : |
| 140 | + else |
| 141 | + $ISOLATE git clone --depth=1 https://github.com/$COVERAGEPY_ACTION_REPO $COVERAGEPY_ACTION_DIR; |
| 142 | + fi; |
| 143 | + |
| 144 | + INPUT_DATABASE_PATH=$GITHUB_WORKSPACE/.coverage INPUT_PACKAGE_NAME=$PACKAGE_NAME INPUT_PACKAGE_ROOT=$GITHUB_WORKSPACE bash $COVERAGEPY_ACTION_DIR/action.sh; |
| 145 | + else |
| 146 | + echo "No GitHub token is provided. If you want to annotate the code with coverage, set 'GITHUB_TOKEN' input variable"; |
| 147 | + fi; |
| 148 | + |
| 149 | + if [[ -n "${CODECOV_TOKEN}" ]]; then |
| 150 | + echo "##[group] Uploading coverage to codecov"; |
| 151 | + $ISOLATE codecov || true; |
| 152 | + echo "##[endgroup]"; |
| 153 | + fi; |
| 154 | + if [[ -n "${COVERALLS_REPO_TOKEN}" ]]; then |
| 155 | + echo "##[group] Uploading coverage to coveralls"; |
| 156 | + $ISOLATE coveralls || true; |
| 157 | + echo "##[endgroup]"; |
| 158 | + fi; |
| 159 | +fi; |
0 commit comments