]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Add `version` to github action (and rewrite the whole thing while at it) (#1940)
authorStefan Foulis <stefan@foulis.ch>
Tue, 1 Jun 2021 01:45:50 +0000 (03:45 +0200)
committerGitHub <noreply@github.com>
Tue, 1 Jun 2021 01:45:50 +0000 (21:45 -0400)
Commit history before merge:

* Add black_version to github action
* Merge upstream/main into this branch
* Add version support for the Black action pt.2

  Since we're moving to a composite based action, quite a few changes
  were made. 1) Support was added for all OSes (Windows was painful).
  2) Isolation from the rest of the workflow had to be done manually
  with a virtual environment.

  Other noteworthy changes:

  - Rewrote basically all of the logic and put it in a Python script
    for easy testing (not doing it here tho cause I'm lazy and I can't
    think of a reasonable way of testing it).
  - Renamed `black_version` to `version` to better fit the existing
    input naming scheme.
  - Added support for log groups, this makes our action's output a
    bit more fancy (I may or may have not added some debug output too).

* Add more to and sorta rewrite the Action's docs

  Reflect compatability and gotchas.

* Add CHANGELOG entry
* Merge main into this branch
* Remove debug; address typos; clean up action.yml

Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
CHANGES.md
action.yml
action/Dockerfile [deleted file]
action/entrypoint.sh [deleted file]
action/main.py [new file with mode: 0644]
docs/integrations/github_actions.md

index de67943d29f34863a2f94353e9169a2c997285c3..81a6d9f666816d872f6ab7fd43582c1172e0f1aa 100644 (file)
 - Add a lower bound for the `aiohttp-cors` dependency. Only 0.4.0 or higher is
   supported. (#2231)
 
-### _Packaging_
+### Integrations
+
+- The official Black action now supports choosing what version to use, and supports the
+  major 3 OSes. (#1940)
+
+### Packaging
 
 - Release self-contained x86_64 MacOS binaries as part of the GitHub release pipeline
   (#2198)
index 827e971801bc2c225486126f02e74c3899602b15..ddf07933a3e2dd119d40bf4b75a848712db7cb7c 100644 (file)
@@ -4,21 +4,56 @@ author: "Łukasz Langa and contributors to Black"
 inputs:
   options:
     description:
-      "Options passed to black. Use `black --help` to see available options. Default:
+      "Options passed to Black. Use `black --help` to see available options. Default:
       '--check'"
     required: false
     default: "--check --diff"
   src:
-    description: "Source to run black. Default: '.'"
+    description: "Source to run Black. Default: '.'"
     required: false
     default: "."
   black_args:
     description: "[DEPRECATED] Black input arguments."
     required: false
     default: ""
+    deprecationMessage:
+      "Input `with.black_args` is deprecated. Use `with.options` and `with.src` instead."
+  version:
+    description: 'Python Version specifier (PEP440) - e.g. "21.5b1"'
+    required: false
+    default: ""
 branding:
   color: "black"
   icon: "check-circle"
 runs:
-  using: "docker"
-  image: "action/Dockerfile"
+  using: composite
+  steps:
+    - run: |
+        # Exists since using github.action_path + path to main script doesn't work because bash
+        # interprets the backslashes in github.action_path (which are used when the runner OS
+        # is Windows) destroying the path to the target file.
+        #
+        # Also semicolons are necessary because I can't get the newlines to work
+        entrypoint="import sys;
+        import subprocess;
+        from pathlib import Path;
+
+        MAIN_SCRIPT = Path(r'${{ github.action_path }}') / 'action' / 'main.py';
+
+        proc = subprocess.run([sys.executable, str(MAIN_SCRIPT)]);
+        sys.exit(proc.returncode)
+        "
+
+        if [ "$RUNNER_OS" == "Windows" ]; then
+          echo $entrypoint | python
+        else
+          echo $entrypoint | python3
+        fi
+      env:
+        # TODO: Remove once https://github.com/actions/runner/issues/665 is fixed.
+        INPUT_OPTIONS: ${{ inputs.options }}
+        INPUT_SRC: ${{ inputs.src }}
+        INPUT_BLACK_ARGS: ${{ inputs.black_args }}
+        INPUT_VERSION: ${{ inputs.version }}
+        pythonioencoding: utf-8
+      shell: bash
diff --git a/action/Dockerfile b/action/Dockerfile
deleted file mode 100644 (file)
index eb22099..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-FROM python:3
-
-ENV PYTHONDONTWRITEBYTECODE 1
-ENV PYTHONUNBUFFERED 1
-
-RUN pip install --upgrade --no-cache-dir black
-
-COPY entrypoint.sh /entrypoint.sh
-
-ENTRYPOINT ["/entrypoint.sh"]
diff --git a/action/entrypoint.sh b/action/entrypoint.sh
deleted file mode 100755 (executable)
index 30bf4eb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash -e
-
-if [ -n "$INPUT_BLACK_ARGS" ]; then
-  echo '::warning::Input `with.black_args` is deprecated. Use `with.options` and `with.src` instead.'
-  black $INPUT_BLACK_ARGS
-  exit $?
-fi
-
-black $INPUT_OPTIONS $INPUT_SRC
diff --git a/action/main.py b/action/main.py
new file mode 100644 (file)
index 0000000..fde3125
--- /dev/null
@@ -0,0 +1,39 @@
+import os
+import shlex
+import sys
+from pathlib import Path
+from subprocess import run, PIPE, STDOUT
+
+ACTION_PATH = Path(os.environ["GITHUB_ACTION_PATH"])
+ENV_PATH = ACTION_PATH / ".black-env"
+ENV_BIN = ENV_PATH / ("Scripts" if sys.platform == "win32" else "bin")
+OPTIONS = os.getenv("INPUT_OPTIONS", default="")
+SRC = os.getenv("INPUT_SRC", default="")
+BLACK_ARGS = os.getenv("INPUT_BLACK_ARGS", default="")
+VERSION = os.getenv("INPUT_VERSION", default="")
+
+run([sys.executable, "-m", "venv", str(ENV_PATH)], check=True)
+
+req = "black[colorama,python2]"
+if VERSION:
+    req += f"=={VERSION}"
+pip_proc = run(
+    [str(ENV_BIN / "python"), "-m", "pip", "install", req],
+    stdout=PIPE,
+    stderr=STDOUT,
+    encoding="utf-8",
+)
+if pip_proc.returncode:
+    print(pip_proc.stdout)
+    print("::error::Failed to install Black.", flush=True)
+    sys.exit(pip_proc.returncode)
+
+
+base_cmd = [str(ENV_BIN / "black")]
+if BLACK_ARGS:
+    # TODO: remove after a while since this is deprecated in favour of SRC + OPTIONS.
+    proc = run([*base_cmd, *shlex.split(BLACK_ARGS)])
+else:
+    proc = run([*base_cmd, *shlex.split(OPTIONS), *shlex.split(SRC)])
+
+sys.exit(proc.returncode)
index 9e8cf436453c93e82f29636a59c568163d9b6e4b..d293c40dadf35bb37130c0e3d984e1147d98986b 100644 (file)
@@ -3,6 +3,14 @@
 You can use _Black_ within a GitHub Actions workflow without setting your own Python
 environment. Great for enforcing that your code matches the _Black_ code style.
 
+## Compatiblity
+
+This action is known to support all GitHub-hosted runner OSes. In addition, only
+published versions of _Black_ are supported (i.e. whatever is available on PyPI).
+
+Finally, this action installs _Black_ with both the `colorama` and `python2` extras so
+the `--color` flag and formatting Python 2 code are supported.
+
 ## Usage
 
 Create a file named `.github/workflows/black.yml` inside your repository with:
@@ -17,19 +25,26 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
       - uses: psf/black@stable
 ```
 
 We recommend the use of the `@stable` tag, but per version tags also exist if you prefer
-that.
+that. Note that the action's version you select is independent of the version of _Black_
+the action will use.
+
+The version of _Black_ the action will use can be configured via `version`. The action
+defaults to the latest release available on PyPI. Only versions available from PyPI are
+supported, so no commit SHAs or branch names.
+
+You can also configure the arguments passed to _Black_ via `options` (defaults to
+`'--check --diff'`) and `src` (default is `'.'`)
 
-You may use `options` (Default is `'--check --diff'`) and `src` (Default is `'.'`) as
-follows:
+Here's an example configuration:
 
 ```yaml
 - uses: psf/black@stable
   with:
     options: "--check --verbose"
     src: "./src"
+    version: "21.5b1"
 ```