commit
e204aa0f93
31
.github/workflows/ci.yml
vendored
31
.github/workflows/ci.yml
vendored
@ -1,22 +1,27 @@
|
|||||||
on: [push]
|
on: [push]
|
||||||
|
|
||||||
|
name: Test Action
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Testing:
|
Testing:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: [3.6, 3.7, 3.8, 3.9]
|
||||||
name: Test the action
|
name: Test the action
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set Node.js 12.x
|
- name: Setup PDM
|
||||||
uses: actions/setup-node@v1
|
uses: ./
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: npm install
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Setup PDM
|
- name: Install dependencies
|
||||||
uses: ./
|
run: pdm install -d -v
|
||||||
with:
|
env:
|
||||||
python-version: 3.6
|
LD_PRELOAD: /lib/x86_64-linux-gnu/libgcc_s.so.1
|
||||||
|
|
||||||
- name: Get the project info
|
- name: Verify python version
|
||||||
run: pdm info
|
run: pdm run python test.py
|
||||||
|
env:
|
||||||
|
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
yarn.lock
|
yarn.lock
|
||||||
__pypackages__/
|
__pypackages__/
|
||||||
|
.pdm.toml
|
||||||
|
18
action.yml
18
action.yml
@ -1,21 +1,21 @@
|
|||||||
---
|
---
|
||||||
name: 'Setup PDM'
|
name: "Setup PDM"
|
||||||
description: 'Set up a specific version of PDM and uses a given Python version to work on'
|
description: "Set up a specific version of PDM and uses a given Python version to work on"
|
||||||
author: 'Frost Ming'
|
author: "Frost Ming"
|
||||||
inputs:
|
inputs:
|
||||||
python-version:
|
python-version:
|
||||||
description: "Version range or exact version of a Python version to use, using SemVer's version range syntax."
|
description: "Version range or exact version of a Python version to use, using SemVer's version range syntax."
|
||||||
default: '3.x'
|
default: "3.x"
|
||||||
architecture:
|
architecture:
|
||||||
description: 'The target architecture (x86, x64) of the Python interpreter.'
|
description: "The target architecture (x86, x64) of the Python interpreter."
|
||||||
token:
|
token:
|
||||||
description: Used to pull python distributions from actions/python-versions. Since there's a default, this is typically not supplied by the user.
|
description: Used to pull python distributions from actions/python-versions. Since there's a default, this is typically not supplied by the user.
|
||||||
default: ${{ github.token }}
|
default: ${{ github.token }}
|
||||||
version:
|
version:
|
||||||
description: The version of PDM to install.
|
description: The version of PDM to install.
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: "node12"
|
||||||
main: 'dist/index.js'
|
main: "dist/setup-pdm.js"
|
||||||
branding:
|
branding:
|
||||||
icon: 'code'
|
icon: "code"
|
||||||
color: 'green'
|
color: "green"
|
||||||
|
55
dist/index.js
vendored
55
dist/index.js
vendored
@ -1,55 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const core = __importStar(require("@actions/core"));
|
|
||||||
const exec = __importStar(require("@actions/exec"));
|
|
||||||
const setupPython = __importStar(require("setup-python/dist"));
|
|
||||||
const os = __importStar(require("os"));
|
|
||||||
const child_process_1 = require("child_process");
|
|
||||||
const INSTALL_VERSION = "3.8";
|
|
||||||
function run() {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
const arch = core.getInput("architecture") || os.arch();
|
|
||||||
const pdmVersion = core.getInput("version");
|
|
||||||
const pdmPackage = pdmVersion ? `pdm==${pdmVersion}` : "pdm";
|
|
||||||
try {
|
|
||||||
yield setupPython.findPythonVersion(INSTALL_VERSION, arch);
|
|
||||||
yield exec.exec("python", ["-m", "pip", "install", "-U", pdmPackage]);
|
|
||||||
const installed = yield setupPython.findPythonVersion(core.getInput("python-version"), arch);
|
|
||||||
yield exec.exec("pdm", ["use", "-f", installed.version]);
|
|
||||||
const pdmVersionOutput = (yield child_process_1.exec("pdm --version")).stdout;
|
|
||||||
core.info(`Successfully setup ${pdmVersionOutput} with Python ${installed.version}`);
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
run();
|
|
6185
dist/setup-pdm.js
vendored
Normal file
6185
dist/setup-pdm.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
|||||||
"description": "The GitHub Action for using pdm as the package manager",
|
"description": "The GitHub Action for using pdm as the package manager",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc"
|
"build": "esbuild src/setup-pdm.ts --bundle --platform=node --outfile=dist/setup-pdm.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -17,6 +17,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^14.14.31",
|
"@types/node": "^14.14.31",
|
||||||
|
"@types/semver": "^7.3.4",
|
||||||
|
"esbuild": "^0.9.0",
|
||||||
"typescript": "^4.2.2"
|
"typescript": "^4.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
49
pdm.lock
generated
Normal file
49
pdm.lock
generated
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
[[package]]
|
||||||
|
name = "certifi"
|
||||||
|
sections = ["dev"]
|
||||||
|
version = "2020.12.5"
|
||||||
|
marker = "python_version < '3.10' and python_version >= '3.9'"
|
||||||
|
summary = "Python package for providing Mozilla's CA Bundle."
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chardet"
|
||||||
|
sections = ["dev"]
|
||||||
|
version = "3.0.4"
|
||||||
|
marker = "python_version >= '3.7' and python_version < '3.8'"
|
||||||
|
summary = "Universal encoding detector for Python 2 and 3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "idna"
|
||||||
|
sections = ["dev"]
|
||||||
|
version = "2.10"
|
||||||
|
marker = "python_version >= '3.6' and python_version < '3.7'"
|
||||||
|
summary = "Internationalized Domain Names in Applications (IDNA)"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "urllib3"
|
||||||
|
sections = ["dev"]
|
||||||
|
version = "1.25.11"
|
||||||
|
marker = "python_version >= '3.8' and python_version < '3.9'"
|
||||||
|
summary = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
lock_version = "2"
|
||||||
|
content_hash = "sha256:09666cab51d1049e60d580a53402036be799c6d7511cefc532de171f40280497"
|
||||||
|
|
||||||
|
[metadata.files]
|
||||||
|
"certifi 2020.12.5" = [
|
||||||
|
{file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
|
||||||
|
{file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"},
|
||||||
|
]
|
||||||
|
"chardet 3.0.4" = [
|
||||||
|
{file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"},
|
||||||
|
{file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"},
|
||||||
|
]
|
||||||
|
"idna 2.10" = [
|
||||||
|
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
|
||||||
|
{file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
|
||||||
|
]
|
||||||
|
"urllib3 1.25.11" = [
|
||||||
|
{file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"},
|
||||||
|
{file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"},
|
||||||
|
]
|
@ -1,13 +1,15 @@
|
|||||||
[project]
|
[project]
|
||||||
name = ""
|
|
||||||
version = ""
|
|
||||||
description = ""
|
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Frost Ming", email = "mianghong@gmail.com"},
|
{name = "Frost Ming", email = "mianghong@gmail.com"},
|
||||||
]
|
]
|
||||||
dependencies = []
|
dev-dependencies = [
|
||||||
dev-dependencies = []
|
"idna; python_version=='3.6'",
|
||||||
requires-python = ">=3.8"
|
"chardet; python_version=='3.7'",
|
||||||
|
"urllib3; python_version=='3.8'",
|
||||||
|
"certifi; python_version=='3.9'",
|
||||||
|
]
|
||||||
|
include = "test.py"
|
||||||
|
requires-python = ">=3.6"
|
||||||
dynamic = ["classifiers"]
|
dynamic = ["classifiers"]
|
||||||
license = {text = "MIT"}
|
license = {text = "MIT"}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
import * as exec from "@actions/exec";
|
import * as exec from "@actions/exec";
|
||||||
import * as setupPython from "setup-python/dist";
|
import * as setupPython from "setup-python/src/find-python";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import { exec as execChild } from "child_process";
|
import { exec as execChild } from "child_process";
|
||||||
|
|
30
test.py
Normal file
30
test.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
|
||||||
|
PACKAGE_MAP = {"3.6": "idna", "3.7": "chardet", "3.8": "urllib3", "3.9": "certifi"}
|
||||||
|
|
||||||
|
|
||||||
|
class TestActionSuite(unittest.TestCase):
|
||||||
|
def test_check_python_version(self):
|
||||||
|
self.assertEqual(
|
||||||
|
".".join(map(str, sys.version_info[:2])), os.getenv("PYTHON_VERSION")
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_check_dependencies(self):
|
||||||
|
python_version = ".".join(map(str, sys.version_info[:2]))
|
||||||
|
for package in PACKAGE_MAP.values():
|
||||||
|
if package != PACKAGE_MAP[python_version]:
|
||||||
|
self.assertRaises(
|
||||||
|
ModuleNotFoundError,
|
||||||
|
importlib.import_module,
|
||||||
|
package,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
importlib.import_module(package)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
Loading…
x
Reference in New Issue
Block a user