Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Web frontend #143

Merged
merged 161 commits into from
Nov 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
0ad37a0
Fixed message and generalized model
susuhahnml Mar 10, 2023
1621655
Update workflow
susuhahnml Mar 15, 2023
0a7a91d
Updated examples and doc
susuhahnml Mar 15, 2023
a141c93
Small fixes
susuhahnml Mar 16, 2023
63b8217
Fix canvas bug
susuhahnml Mar 20, 2023
cd3b80c
Better handling of unsat output
susuhahnml Mar 20, 2023
94ff32a
Fixed getting all models in update
susuhahnml Mar 22, 2023
cb60962
Fix browsing
susuhahnml Apr 3, 2023
b40ec19
Merge pull request #114 from potassco/cautious_tag
susuhahnml Apr 4, 2023
6ba137e
Making metadata pipenv-compatible
Cedricmartens Apr 13, 2023
45b577f
Merge pull request #115 from Cedricmartens/patch-1
susuhahnml Apr 13, 2023
8feed7c
Study regulations example
susuhahnml May 12, 2023
0141cad
Merge pull request #119 from potassco/study-reg-example
susuhahnml May 23, 2023
f3054cd
Renamed source to domain
susuhahnml May 25, 2023
5605f5f
Constant in the command line
susuhahnml May 26, 2023
da6482d
fixed find_plan
Cedricmartens Jun 21, 2023
4bd2ff4
Fix assume_and_step
Cedricmartens Jun 21, 2023
f50c40a
Update temporal_backend.py
Cedricmartens Jun 21, 2023
9ec1f18
Update elevator example
Cedricmartens Jun 21, 2023
bf0461f
Cleanup
Cedricmartens Jun 22, 2023
5af50a0
Merge pull request #130 from Cedricmartens/temporal-fix
Cedricmartens Jun 22, 2023
273143f
Added a simplified backend
Cedricmartens Jul 10, 2023
9723513
Setup pip installation check ci, updated a dependency
alexl4123 Jul 19, 2023
95b342f
[69,132] - Updated dependencies, CI workflow and installation recomme…
alexl4123 Jul 21, 2023
6bf7c09
[#124] - Implemented Horizontal flex
alexl4123 Jul 24, 2023
e975fb7
[#123] - First version for separate specification of height and width…
alexl4123 Jul 24, 2023
e965d87
[#113] - Fixed #show <> bug, which occured when #show lines were pres…
alexl4123 Jul 24, 2023
c8661be
[#135] - Refactored naming of basic gui test files and added two more
alexl4123 Jul 24, 2023
c711f57
[#135] - Refactored basic tests
alexl4123 Jul 25, 2023
44d06d3
[#133] - Added more detailed error msgs for file not found for domain…
alexl4123 Jul 25, 2023
433e1d6
[#124] - Added example for combined horizontal and vertical flex
alexl4123 Jul 25, 2023
754365d
[#123] - Give general possibility for separate height and width
alexl4123 Jul 25, 2023
711e7b6
[#55] - Added basic integration tests for backend
alexl4123 Aug 1, 2023
8e84e6a
[#135] - Added README.md files to basic tests
alexl4123 Aug 2, 2023
dd195fb
[#55] - Added backend integration tests for basic tests 00 to 05
alexl4123 Aug 3, 2023
0b40973
[#55] - Added additional tests (basic 06-11 and temporal backend)
alexl4123 Aug 4, 2023
f6a8d7d
[#55] - Added Unit tests for clingo backend
alexl4123 Aug 21, 2023
6d71ebf
[#55] - Added windows and macos to CI/CD
alexl4123 Aug 21, 2023
d4e82e9
[#122] - Added linter for clinguin
alexl4123 Aug 21, 2023
d4a6cbb
[#122] - autoflake and isort
alexl4123 Aug 21, 2023
f07a847
[#122] - added black
alexl4123 Aug 21, 2023
afa175f
[#55] - Improved structure of basic test readme files
alexl4123 Aug 21, 2023
f87f49c
[AngularFrontend] - Basic Integration of Berndt Uhligs work into Clin…
BerndtUhlig Aug 21, 2023
cd33eac
[AngularFrontend] - Added Readme as well as examples for ASP
BerndtUhlig Aug 22, 2023
00d34d9
[#138/#122] - Linted code base according to flake8
alexl4123 Aug 22, 2023
a1cd56c
[AngularFrontend] - Fixed an issue with the display of multiple optio…
BerndtUhlig Aug 22, 2023
85142ba
[#138,#122] - Partly linted frontend with pylint.
alexl4123 Aug 22, 2023
6318aab
Documentation and renaming
Cedricmartens Aug 22, 2023
e6bd25f
Merge branch 'dev' into Simple-Backend
Cedricmartens Aug 22, 2023
40673a6
[#139,#122] - Linted clinguin according to flake8 and pylint
alexl4123 Aug 23, 2023
4488acf
[#139,#122] - Reformat and relint
alexl4123 Aug 23, 2023
d345dab
[#138,#122] - Updated setup.cfg
alexl4123 Aug 23, 2023
a162564
[#131] - Merge pull request #131 from Cedricmartens/Simple-Backend
alexl4123 Aug 23, 2023
5790a09
[#139] - Merge branch 'dev' into linting
alexl4123 Aug 23, 2023
15f8111
[#139,#122] - Formatted and linted singleshot backend
alexl4123 Aug 23, 2023
6e007da
[#140,#137] - Merge branch 'web_frontend' into merge_140
alexl4123 Aug 23, 2023
d40a082
[#137] - Merge pull request #141 from potassco/merge_140
alexl4123 Aug 23, 2023
9661e88
[#137] - Separated angular from python files
alexl4123 Aug 23, 2023
294fc44
Added sessions to run nox
susuhahnml Aug 23, 2023
a7ddb59
Merge pull request #139 from potassco/linting
susuhahnml Aug 23, 2023
09fad08
[#137] - Clean up angular repo
alexl4123 Aug 23, 2023
06f3354
Merge branch 'dev' into web_frontend
alexl4123 Aug 23, 2023
e23248a
[#137] - First sketch of a general web-frontend
alexl4123 Aug 24, 2023
011cbee
[#137] - Added bootstrap css, added basic dropdown
alexl4123 Aug 24, 2023
1c451ac
[#137] - First iteraion of sudoku example
alexl4123 Aug 25, 2023
5dcdbe3
[#137] - Added menu-bar
alexl4123 Aug 25, 2023
c01b4d1
[#137] - Added button, other improvements
alexl4123 Aug 25, 2023
7ce0fcf
[#137] - Added basic canvas and message support
alexl4123 Aug 28, 2023
8d7688f
[#137] - Refactoring
alexl4123 Aug 28, 2023
2e116da
[#137] - Changed some examples according to web-frontend
alexl4123 Aug 28, 2023
e51d92e
[#137] - Tighter integration of ClingraphViz
alexl4123 Aug 28, 2023
5a04711
[#137] - Further integration
alexl4123 Aug 28, 2023
880c919
[#137] - Base clingraphIneractiveBackend on clingraphBackend
alexl4123 Aug 28, 2023
7dce4a8
[#137] - Refactored examples for clingraph-interactive accordingly
alexl4123 Aug 28, 2023
f9fa353
[#137] - Changed default behavior of images in clinguin (base64)
alexl4123 Aug 28, 2023
e5dc89e
[#137] - Tentative fix of web_frontend issues (housing-example)
alexl4123 Aug 29, 2023
54a1cd8
[#137] - Added some installation instructions for frontend
alexl4123 Aug 29, 2023
00e3616
Small fixes
susuhahnml Sep 1, 2023
c470d06
[#137] - Pushed fixes to housing example
alexl4123 Sep 12, 2023
7a0555a
[#137] - Merge branch 'web_frontend' of github.com:potassco/clinguin …
alexl4123 Sep 12, 2023
af276d9
[#137] - Improved housing-ui, improved way how error messages are dis…
alexl4123 Sep 12, 2023
4a16b17
[#137] - Prepare packaging
alexl4123 Sep 12, 2023
0cd5af6
[#137] - Packaged the web-frontend
alexl4123 Sep 12, 2023
e20c462
[#137] - Added some instructions to the README.md
alexl4123 Sep 12, 2023
bf5a82c
[#137] - Commited changes for sudoku
alexl4123 Sep 12, 2023
db87a8e
[#144] - Added context to the backend
alexl4123 Sep 12, 2023
e2c0f14
[#145] - Merge branch 'context' into interactivity
alexl4123 Sep 12, 2023
24067bc
[#145] - First take on Clingraph interactivity
alexl4123 Sep 12, 2023
5561927
[#145] - New take on attributes
alexl4123 Sep 13, 2023
4758323
[#145] - Went further on the new attribute idea
alexl4123 Sep 13, 2023
c14bbb7
[#145] - Implemented/Extended 3Color and AST Examples
alexl4123 Sep 13, 2023
13bffcd
[#145] - Cleaned up repo/removed separation between clingraph_interac…
alexl4123 Sep 14, 2023
37c856a
[#145] - Renamed interactive examples
alexl4123 Sep 14, 2023
7b2a98a
[#145] - Changed behavior of AST Example (single button, etc.)
alexl4123 Sep 14, 2023
6506012
[#145] - Added basic integration of textfield
alexl4123 Sep 14, 2023
c523cf1
[#145] - Added modal, new take on housing
alexl4123 Sep 14, 2023
a2862e9
[#145] - First take on context-menu
alexl4123 Sep 15, 2023
f84219b
[#145] - Added Sudoku2 example, small bugfixes
alexl4123 Sep 15, 2023
ff358bd
[#145] - Updated packaging
alexl4123 Sep 15, 2023
929eb3e
[#145] - Edit relevant examples
alexl4123 Sep 15, 2023
21dfd1d
[#145] - Linted codebase
alexl4123 Sep 15, 2023
4c3852b
[#145] - Fixed modal, added (small) documentation for frontend
alexl4123 Sep 15, 2023
5e837bf
Merge pull request #146 from potassco/interactivity
susuhahnml Sep 15, 2023
f6e9c0e
Small changes
susuhahnml Sep 18, 2023
fb843a4
Option to pass a custom on_model callback when getting the consequences
susuhahnml Aug 23, 2023
0a12b3e
Merge pull request #147 from potassco/extend-clbk
susuhahnml Sep 18, 2023
81213d3
Web changes
susuhahnml Sep 20, 2023
10205d3
better colors
susuhahnml Sep 22, 2023
7912414
Better examples
susuhahnml Sep 26, 2023
22844a1
Changed name
susuhahnml Sep 26, 2023
d6e664c
raplace
susuhahnml Sep 26, 2023
f1a2e9a
Sudokus
susuhahnml Sep 26, 2023
773ff78
AST
susuhahnml Sep 27, 2023
6e1f724
More examples
susuhahnml Sep 27, 2023
cb9cb39
Export file
susuhahnml Sep 27, 2023
1133490
improved export
susuhahnml Sep 28, 2023
d053e9a
Fixed clingraph
susuhahnml Sep 28, 2023
e952a3f
restart policy
susuhahnml Sep 28, 2023
8377cd3
better error handling
susuhahnml Sep 28, 2023
ded1998
Optional context value
susuhahnml Sep 28, 2023
cd5e8ef
Multi policy
susuhahnml Sep 28, 2023
6489184
Small UI fixes
susuhahnml Sep 29, 2023
65056c1
Cleanup
susuhahnml Oct 3, 2023
9880e0f
better job shop UI but still next issue
susuhahnml Oct 4, 2023
a22ae5a
Fixed job shop
susuhahnml Oct 4, 2023
9b22b92
Merge pull request #148 from potassco/clingo-dl
susuhahnml Oct 6, 2023
14a241b
Better integration with clingraph
susuhahnml Oct 27, 2023
38b66e9
Example and better context menu
susuhahnml Oct 28, 2023
7ee3693
Fixed rebase
susuhahnml Oct 28, 2023
59e3397
Merge pull request #149 from potassco/web_sus_clingraph
susuhahnml Oct 28, 2023
d3c260a
Merge pull request #150 from potassco/web_sus
susuhahnml Oct 28, 2023
0c90105
Fixed tests
susuhahnml Nov 10, 2023
3f344ac
Fixed angular frontend
susuhahnml Nov 10, 2023
d153044
Fixed all examples
susuhahnml Nov 10, 2023
1f0eae2
Better images
susuhahnml Nov 10, 2023
1cc0e46
Examples readme
susuhahnml Nov 10, 2023
ce2ed2c
Index and user guide
susuhahnml Nov 13, 2023
fbddbec
Documentation before spell check
susuhahnml Nov 15, 2023
9c5db41
More documentation
susuhahnml Nov 16, 2023
8948216
Working nox
susuhahnml Nov 16, 2023
8c3d6b3
Deploy scripts
susuhahnml Nov 16, 2023
4b45ec7
run on push
susuhahnml Nov 16, 2023
b49837d
Removed run on push
susuhahnml Nov 16, 2023
316ba6c
Trigger script
susuhahnml Nov 16, 2023
1c11269
Added description
susuhahnml Nov 16, 2023
0e08cf8
Set fastapi version
susuhahnml Nov 17, 2023
24191ec
COnda forge
susuhahnml Nov 17, 2023
9f49010
updates readme
susuhahnml Nov 17, 2023
c9bba12
Improved readme
susuhahnml Nov 17, 2023
9e1e5a2
Images
susuhahnml Nov 17, 2023
846206b
loose httpx
susuhahnml Nov 17, 2023
f038c85
new version
susuhahnml Nov 17, 2023
edd3918
Package data
susuhahnml Nov 17, 2023
29b7954
Package data
susuhahnml Nov 17, 2023
824872a
MANIFEST
susuhahnml Nov 17, 2023
30d145c
Fix no module
susuhahnml Nov 17, 2023
eed0d46
Docs
susuhahnml Nov 17, 2023
dfa091f
No conda
susuhahnml Nov 17, 2023
2758069
No httpx
susuhahnml Nov 17, 2023
89df340
Removed version
susuhahnml Nov 17, 2023
c791fa2
Less dependencies
susuhahnml Nov 20, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[flake8]
max-line-length = 120
exclude =
.git
.github
ignore = E741 W503 E203 E126 E121
74 changes: 74 additions & 0 deletions .github/conda.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env python
'''
Simple script to call conda build with the current revision and version.
'''

import argparse
import subprocess
import json
from re import match
import os

NAME = 'clinguin'

def get_build_number(channels, version):
'''
Get the next build number.
'''
try:
pkgs = json.loads(subprocess.check_output(['conda', 'search', '--json', '-c', channels[0], NAME]))
except subprocess.CalledProcessError:
pkgs = {NAME: []}


build_number = -1
for pkg in pkgs.get(NAME, []):
if pkg['channel'].find(channels[0]) >= 0 and pkg["version"] == version:
build_number = max(build_number, pkg['build_number'])

return build_number + 1

def run():
'''
Compile and upload conda packages.
'''

parser = argparse.ArgumentParser(description='Build conda packages.')
parser.add_argument('--release', action='store_true', help='Build release packages.')
args = parser.parse_args()
if args.release:
label = None
channels = ['potassco', 'conda-forge']
else:
label = "dev"
channels = ['potassco/label/dev', 'potassco', 'conda-forge']

version = None
with open('setup.cfg') as fh:
for line in fh:
m = match(r'''[ ]*version[ ]*=[ ]*([0-9]+\.[0-9]+\.[0-9]+)(\.post[0-9]+)?''', line)
if m is not None:
version = m.group(1)
assert version is not None
build_number = get_build_number(channels, version)

build_env = os.environ.copy()
build_env.pop("BUILD_RELEASE", "1" if args.release else None)
build_env["VERSION_NUMBER"] = version
build_env["BUILD_NUMBER"] = str(build_number)
if 'GITHUB_SHA' in os.environ:
build_env["BUILD_REVISION"] = os.environ['GITHUB_SHA']

recipe_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'conda')
options = ['conda', 'build']
if label is not None:
options.extend(['--label', label])

for c in channels:
options.extend(['-c', c])
options.append(recipe_path)

subprocess.check_call(options, env=build_env)

if __name__ == '__main__':
run()
42 changes: 42 additions & 0 deletions .github/conda/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{% set name = 'clinguin' %}
{% set dev = not environ.get('BUILD_RELEASE', false) %}
{% set version = environ.get('VERSION_NUMBER') %}
{% set revision = environ.get('GITHUB_SHA', 'wip') %}
{% set build = environ.get('BUILD_NUMBER', "0") %}

package:
name: {{ name }}
version: {{ version }}

source:
path: ../..

requirements:
host:
- python >=3.8
- pip
run:
- clingo>=5.6.0
- clorm>=1.4.1
- clingo-dl
- fastapi==0.103.*
- networkx
- uvicorn
- clingraph
- Pillow

build:
number: {{ build }}
noarch: python
script: python -m pip install --no-deps --ignore-installed .
entry_points: ['clinguin = clinguin:main']


about:
home: https://potassco.org/
license: MIT
license_family: MIT
license_file: LICENSE
summary: A system to build User Interfaces in ASP
doc_url: https://clinguin.readthedocs.io/en/latest/index.html
dev_url: https://github.com/potassco/{{ name }}
66 changes: 66 additions & 0 deletions .github/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# do not edit the workflows, they are generated from this file
pip:
pure: True
version: |
version = None
with open('setup.cfg') as fh:
for line in fh:
m = match(r'''[ ]*version[ ]*=[ ]*([0-9]+\.[0-9]+\.[0-9]+)(\.post[0-9]+)?''', line)
if m is not None:
version = m.group(1)
build_depends_release: |
python3 -m pip install --user -r .github/requirements.txt
build_depends_dev: |
python3 -m pip install --user --extra-index-url https://test.pypi.org/simple/ -r .github/requirements.txt

conda:
package_name:
'clinguin'
os:
- 'ubuntu-latest'
channels_release:
- 'potassco'
- 'conda-forge'
channels_dev:
- 'potassco/label/dev'
- 'potassco'
- 'conda-forge'
version: |
version = None
with open('setup.cfg') as fh:
for line in fh:
m = match(r'''[ ]*version[ ]*=[ ]*([0-9]+\.[0-9]+\.[0-9]+)(\.post[0-9]+)?''', line)
if m is not None:
version = m.group(1)
meta:
url: https://github.com/potassco/{{ name }}/archive/v{{ version }}.tar.gz
git_url: https://github.com/potassco/{{ name }}.git
requirements:
host:
- python >=3.8
- pip
run:
- clingo>=5.6.0
- clorm>=1.4.1
- clingo-dl
- fastapi==0.103.*
- networkx
- uvicorn
- clingraph
- Pillow

build:
noarch: python
script: 'python -m pip install --no-deps --ignore-installed .'
entry_points:
- clinguin = clinguin:main

about:
home: https://potassco.org/
license: MIT
license_family: MIT
license_file: LICENSE
summary: A system to build User Interfaces in ASP

doc_url: https://clinguin.readthedocs.io/en/latest/index.html
dev_url: https://github.com/potassco/{{ name }}
75 changes: 75 additions & 0 deletions .github/pipsource.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
'''
Script to build pip source package.
'''

import argparse
from re import finditer, escape, match, sub, search
from subprocess import check_call, check_output
from os.path import exists

def adjust_version(url):
'''
Adjust version in setup.py.
'''
if exists('setup.cfg'):
setup_type = 'cfg'
setup_path = 'setup.cfg'
else:
setup_type = 'py'
setup_path = 'setup.py'

with open(setup_path) as fr:
setup = fr.read()

if setup_type == 'cfg':
package_name = search(r'name[ ]*=[ ]*(.*)[ ]*', setup).group(1)
package_regex = package_name.replace('-', '[-_]')
else:
package_name = search(r'''name[ ]*=[ ]*['"]([^'"]*)['"]''', setup).group(1)
package_regex = package_name.replace('-', '[-_]')

pip = check_output(['curl', '-sL', '{}/{}'.format(url, package_name)]).decode()
version = None
with open('setup.cfg') as fh:
for line in fh:
m = match(r'''[ ]*version[ ]*=[ ]*([0-9]+\.[0-9]+\.[0-9]+)(\.post[0-9]+)?''', line)
if m is not None:
version = m.group(1)
assert version is not None

post = 0
for m in finditer(r'{}-{}\.tar\.gz'.format(package_regex, escape(version)), pip):
post = max(post, 1)

for m in finditer(r'{}-{}\.post([0-9]+)\.tar\.gz'.format(package_regex, escape(version)), pip):
post = max(post, int(m.group(1)) + 1)

for m in finditer(r'{}-{}\.post([0-9]+).*\.whl'.format(package_regex, escape(version)), pip):
post = max(post, int(m.group(1)))

with open(setup_path, 'w') as fw:
if setup_type == 'cfg':
if post > 0:
fw.write(sub('version( *)=.*', 'version = {}.post{}'.format(version, post), setup, 1))
else:
fw.write(sub('version( *)=.*', 'version = {}'.format(version), setup, 1))
else:
if post > 0:
fw.write(sub('version( *)=.*', 'version = \'{}.post{}\','.format(version, post), setup, 1))
else:
fw.write(sub('version( *)=.*', 'version = \'{}\','.format(version), setup, 1))

def run():
parser = argparse.ArgumentParser(description='Build source package.')
parser.add_argument('--release', action='store_true', help='Build release package.')
args = parser.parse_args()
if args.release:
url = 'https://pypi.org/simple'
else:
url = 'https://test.pypi.org/simple'

adjust_version(url)
check_call(['python3', 'setup.py', 'sdist', 'bdist_wheel'])

if __name__ == "__main__":
run()
8 changes: 8 additions & 0 deletions .github/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
clingo>=5.6.0
clorm>=1.4.1
clingo-dl
fastapi==0.103.*
networkx
uvicorn
clingraph
Pillow
102 changes: 102 additions & 0 deletions .github/trigger.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/bin/bash

repo=clinguin

function list() {
curl \
-X GET \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/potassco/${repo}/actions/workflows" \
-d "{\"ref\":\"ref\"}"
}

function dispatch() {
token=$(grep -A1 workflow_dispatch ~/.tokens | tail -n 1)
curl \
-u "$token" \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/potassco/${repo}/actions/workflows/$1/dispatches" \
-d "{\"ref\":\"$3\",\"inputs\":{\"wip\":\"$2\"${4:+,$4}}}"
}

function usage() {
cat <<EOF
trigger.sh -h
show this help
trigger.sh list
list available workflows
trigger.sh {release|dev} BRANCH
deploy release or development packages
EOF
}

function check_action() {
if [[ "$1" == "$2" ]]; then
if (($3 + $4 != $5 )); then
if (( $4 == 0 )); then
echo "action '${2}' expects no arguments" >&2
elif (( $4 == 1 )); then
echo "action '${2}' expects 1 argument" >&2
else
echo "action '${2}' expects ${4} arguments" >&2
fi
exit 1
fi
return 0
fi
return 1
}

function fail() {
echo "unexpected action '$1'" >&2
exit 1
}

while getopts ":h" flag; do
case "$flag" in
h)
usage
exit 0
;;
:)
echo "ERROR: option '-${OPTARG}' expects an argument" >&2
exit 1
;;
?)
echo "ERROR: invalid option '-${OPTARG}'" >&2
exit 1
;;
esac
done

if (( $OPTIND > $# )); then
echo "ERROR: no action given" >&2
usage
exit 1
fi

action="${@:$OPTIND:1}"

check_action list "$action" $OPTIND 0 $# ||
check_action release "$action" $OPTIND 1 $# ||
check_action dev "$action" $OPTIND 1 $# ||
fail "$action"

wip=true

case "$action" in
list)
list
;;
release)
wip=false
;&
dev)
branch="${@:$OPTIND+1:1}"
# .github/workflows/conda-dev.yml
# dispatch 76358545 "$wip" "$branch"
# .github/workflows/pip-dev.yml
dispatch 76358546 "$wip" "$branch"
;;
esac
Loading
Loading