diff --git a/.circleci/config.yml b/.circleci/config.yml index 22263782a1b..de8fab93353 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -93,7 +93,7 @@ jobs: - run: tox -e validate_test_tools js_lint: docker: - - image: cimg/node:16.13.2 + - image: cimg/node:16.15.1 <<: *set_workdir steps: - *restore_yarn_cache diff --git a/.github/workflows/build_container_image.yaml b/.github/workflows/build_container_image.yaml index ca80135bcd1..e4abef9f38d 100644 --- a/.github/workflows/build_container_image.yaml +++ b/.github/workflows/build_container_image.yaml @@ -22,9 +22,9 @@ jobs: id: branch run: echo "::set-output name=name::$(BRANCH_NAME=${GITHUB_REF##*/}; echo ${BRANCH_NAME/release_/})" - name: Build container image - run: docker build . --build-arg GIT_COMMIT=$(git rev-parse HEAD) --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') --build-arg IMAGE_TAG=${{ steps.branch.outputs.name }} -t galaxyproject/galaxy-min:${{ steps.branch.outputs.name }} -t quay.io/galaxyproject/galaxy-min:${{ steps.branch.outputs.name }} -f .k8s_ci.Dockerfile + run: docker build . --build-arg GIT_COMMIT=$(git rev-parse HEAD) --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') --build-arg IMAGE_TAG=${{ steps.branch.outputs.name }} -t galaxy/galaxy-min:${{ steps.branch.outputs.name }} -t quay.io/galaxyproject/galaxy-min:${{ steps.branch.outputs.name }} -f .k8s_ci.Dockerfile - name: Create auto-expiring one for per-commit auto repository - run: echo "FROM galaxyproject/galaxy-min:${{ steps.branch.outputs.name }}" | docker build --label "quay.expires-after"="90d" -t "quay.io/galaxyproject/galaxy-k8s-auto:${{ steps.commit.outputs.sha_short }}" - + run: echo "FROM galaxy/galaxy-min:${{ steps.branch.outputs.name }}" | docker build --label "quay.expires-after"="90d" -t "quay.io/galaxyproject/galaxy-k8s-auto:${{ steps.commit.outputs.sha_short }}" - - name: Login to quay.io uses: actions-hub/docker/login@master env: @@ -47,4 +47,4 @@ jobs: - name: Push to DockerHub with branch name uses: actions-hub/docker@master with: - args: push galaxyproject/galaxy-min:${{ steps.branch.outputs.name }} + args: push galaxy/galaxy-min:${{ steps.branch.outputs.name }} diff --git a/.k8s_ci.Dockerfile b/.k8s_ci.Dockerfile index 4042f77ea1d..6e27b904f64 100644 --- a/.k8s_ci.Dockerfile +++ b/.k8s_ci.Dockerfile @@ -18,11 +18,11 @@ ARG ROOT_DIR=/galaxy ARG SERVER_DIR=$ROOT_DIR/server -ARG STAGE1_BASE=python:3.7-slim +ARG STAGE1_BASE=python:3.10-slim ARG FINAL_STAGE_BASE=$STAGE1_BASE ARG GALAXY_USER=galaxy ARG GALAXY_PLAYBOOK_REPO=https://github.com/galaxyproject/galaxy-docker-k8s -ARG GALAXY_PLAYBOOK_BRANCH=v2.0.0 +ARG GALAXY_PLAYBOOK_BRANCH=v3.0.0 ARG GIT_COMMIT=unspecified ARG BUILD_DATE=unspecified @@ -51,7 +51,7 @@ RUN set -xe; \ libc-dev \ bzip2 \ gcc \ - && pip install --no-cache virtualenv 'ansible<2.10' \ + && pip install --no-cache virtualenv ansible \ && apt-get autoremove -y && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* @@ -72,7 +72,7 @@ COPY . $SERVER_DIR/ FROM stage1 AS server_build ARG SERVER_DIR -RUN ansible-playbook -i localhost, playbook.yml -v -e galaxy_build_client=False -e galaxy_virtualenv_command=virtualenv +RUN ansible-playbook -i localhost, playbook.yml -v -e "{galaxy_build_client: false}" -e galaxy_virtualenv_command=virtualenv RUN cat /galaxy/server/lib/galaxy/dependencies/conditional-requirements.txt | grep psycopg2-binary | xargs /galaxy/server/.venv/bin/pip install diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 6ff3959506d..d1528b28287 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,118 +1,7 @@ # Galaxy Project Code of Conduct -## Note: Change is Coming +This project is committed to providing a welcoming and harassment-free +experience for everyone. We therefore expect participants to abide by our Code +of Conduct, which can be found at: -Since 2015 the Galaxy Project Code of Conduct has resided here, and updates to it have been coordinated by the Committers Group for this repo. - -This code of conduct has served us reasonably well over the years, but it is time for a refresh. Since 2015 the world has become much more aware of the need for codes of conduct, and best practices for creating and enforcing them have moved forward significantly. - -**As a result it is past time to update both our code of conduct and our process for maintaining it.** The Galaxy Outreach and Training [Working Group](https://galaxyproject.org/community/wg/) is currently working on a first draft of a new code and new processes. The final code and processes we adopt will be [implemented](https://galaxyproject.org/community/coc/) only after it has been discussed, revised, and approved by the community. - -Until that happens this will remain the Galaxy Project Code of Conduct. - -# Code of Conduct - -This code of conduct outlines our expectations for participants within the -Galaxy community, as well as steps to reporting unacceptable behavior. We are -committed to providing a welcoming and inspiring community for all and expect -our code of conduct to be honored. Anyone who violates this code of conduct may -be banned from the community. - -Our open source community strives to: - -* **Be friendly and patient.** - -* **Be welcoming**: We strive to be a community that welcomes and - supports people of all backgrounds and identities. This includes, but is not - limited to members of any race, ethnicity, culture, national origin, colour, - immigration status, social and economic class, educational level, sex, sexual - orientation, gender identity and expression, age, size, family status, - political belief, religion, and mental and physical ability. - -* **Be considerate**: Your work will be used by other people, and you in turn - will depend on the work of others. Any decision you take will affect users - and colleagues, and you should take those consequences into account when - making decisions. Remember that we're a world-wide community, so you might - not be communicating in someone else's primary language. - -* **Be respectful**: Not all of us will agree all the time, but disagreement is - no excuse for poor behavior and poor manners. We might all experience some - frustration now and then, but we cannot allow that frustration to turn into a - personal attack. It’s important to remember that a community where people - feel uncomfortable or threatened is not a productive one. - -* **Be careful in the words that we choose**: We are a community of - professionals, and we conduct ourselves professionally. Be kind to others. Do - not insult or put down other participants. Harassment and other exclusionary - behavior aren't acceptable. This includes, but is not limited to: Violent - threats or language directed against another person, Discriminatory jokes and - language, Posting sexually explicit or violent material, Posting (or - threatening to post) other people’s personally identifying information - (“doxing”), Personal insults, especially those using racist or sexist terms, - Unwelcome sexual attention, Advocating for, or encouraging, any of the above - behavior, Repeated harassment of others. In general, if someone asks you to - stop, then stop. - -* **Try to understand why we disagree**: Disagreements, both social and - technical, happen all the time. It is important that we resolve disagreements - and differing views constructively. Remember that we’re different. Diversity - contributes to the strength of our community, which is composed of people - from a wide range of backgrounds. Different people have different - perspectives on issues. Being unable to understand why someone holds a - viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to - err and blaming each other doesn’t get us anywhere. Instead, focus on helping - to resolve issues and learning from mistakes. - -### Diversity Statement - -We encourage everyone to participate and are committed to building a community -for all. Although we will fail at times, we seek to treat everyone both as -fairly and equally as possible. Whenever a participant has made a mistake, we -expect them to take responsibility for it. If someone has been harmed or -offended, it is our responsibility to listen carefully and respectfully, and do -our best to right the wrong. - -Although this list cannot be exhaustive, we explicitly honor diversity in age, -gender, gender identity or expression, culture, ethnicity, language, national -origin, political beliefs, profession, race, religion, sexual orientation, -socioeconomic status, and technical ability. We will not tolerate -discrimination based on any of the protected characteristics above, including -participants with disabilities. - -### Reporting Issues - -If you experience or witness unacceptable behavior, or have any other concerns, -please report it to any combination of the following people that makes you feel -the most comfortable: - -- Dave Clements (clementsgalaxy@gmail.com). Dave is the Galaxy Project community - outreach manager and has experience handling Code of Conduct related issues. -- Dr. Mike Schatz (mschatz@cs.jhu.edu). Mike is Dave Clements' direct manager - and issues related to Dave in some way should be reported to Mike. -- Helena Rasche (helena.rasche@gmail.com). Helena is a well-known, trusted - community member, is LGBT+, and has completely separate funding and - institutional affiliation from Dave and Mike. - -All reports will be handled with discretion. In your report please include: - -- Your contact information. - -- Names (real, nicknames, or pseudonyms) of any individuals involved. If there - are additional witnesses, please include them as well. Your account of what - occurred, and if you believe the incident is ongoing. If there is a publicly - available record (e.g. a mailing list archive or a public IRC logger), please - include a link. - -- Any additional information that may be helpful. - -After filing a report, a representative will contact you personally, review the -incident, follow up with any additional questions, and make a decision as to -how to respond. If the person who is harassing you is part of the response -team, they will recuse themselves from handling your incident. If the complaint -originates from a member of the response team, it will be handled by a -different member of the response team. We will respect confidentiality requests -for the purpose of protecting victims of abuse. - -### Attribution & Acknowledgements - -This code of conduct is based on the Open Code of Conduct from the TODOGroup. +https://galaxyproject.org/community/coc/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 449402cb7bc..a864a68b05c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -158,7 +158,7 @@ https://help.github.com/en/github/getting-started-with-github/git-and-github-lea particular emphasis on readability being the ultimate goal: - 4 spaces (not tabs!) per indentation level - divergences from PEP-8 are listed in the `[flake8]` section of the - `setup.cfg` file + `.flake8` file - The Python code base is automatically formatted using [isort](https://pycqa.github.io/isort/) (for imports) and [black](https://black.readthedocs.io). To easily format your Python code diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 14087abb64d..c5363982eb5 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -8,6 +8,7 @@ The following individuals have contributed code to Galaxy: * Guruprasad Ananda * Evgeny Anatskiy * Florent Angly +* Patrick Austin * Raj Ayyampalayam * Abdulrahman Azab * Finn Bacall @@ -34,6 +35,7 @@ The following individuals have contributed code to Galaxy: * Richard Burhans * Jennifer Cabral * Martin Čech +* Eli Chadwick * Ramkrishna Chakrabarty * Matt Chambers * Brad Chapman diff --git a/Makefile b/Makefile index 5709f7a41c5..43b87be0c47 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ VENV?=.venv IN_VENV=if [ -f "$(VENV)/bin/activate" ]; then . "$(VENV)/bin/activate"; fi; RELEASE_CURR:=22.09 RELEASE_UPSTREAM:=upstream -TARGET_BRANCH=$(RELEASE_UPSTREAM)/dev CONFIG_MANAGE=$(IN_VENV) python lib/galaxy/config/config_manage.py PROJECT_URL?=https://github.com/galaxyproject/galaxy DOCS_DIR=doc @@ -45,6 +44,9 @@ format: ## Format Python code base $(IN_VENV) isort . $(IN_VENV) black . +remove-unused-imports: ## Remove unused imports in Python code base + $(IN_VENV) autoflake --in-place --remove-all-unused-imports --recursive --verbose lib/ test/ + list-dependency-updates: setup-venv $(IN_VENV) pip list --outdated --format=columns @@ -159,6 +161,9 @@ update-cwl-conformance-tests: ## update CWL conformance tests $(MAKE) clean-cwl-conformance-tests $(MAKE) generate-cwl-conformance-tests +skip-client: ## Run only the server, skipping the client build. + GALAXY_SKIP_CLIENT_BUILD=1 sh run.sh + node-deps: ## Install NodeJS dependencies. ifndef YARN @echo "Could not find yarn, which is required to build the Galaxy client.\nTo install yarn, please visit \033[0;34mhttps://yarnpkg.com/en/docs/install\033[0m for instructions, and package information for all platforms.\n" diff --git a/client/.node_version b/client/.node_version index 23d9c36a118..d9289897d30 100644 --- a/client/.node_version +++ b/client/.node_version @@ -1 +1 @@ -16.13.2 +16.15.1 diff --git a/client/README.md b/client/README.md index 4ef83850246..15fad423884 100644 --- a/client/README.md +++ b/client/README.md @@ -86,6 +86,14 @@ Sometimes you want to run your local UI against a remote Galaxy server. This is CHANGE_ORIGIN=true GALAXY_URL="https://usegalaxy.org/" make client-dev-server +## Running a Separate Server + +When developing the client it can be helpful to run a local server for the +client to connect to, and run the client separately with one of the above +commands. This command will run galaxy without building the client: + + make skip-client + ## Changing Styles/CSS Galaxy uses Sass for its styling, which is a superset of CSS that compiles down diff --git a/client/package.json b/client/package.json index d0b5651efcd..0352d66a6b7 100644 --- a/client/package.json +++ b/client/package.json @@ -17,7 +17,9 @@ "not baidu 7.12" ], "resolutions": { - "**/chokidar": "3.5.3" + "chokidar": "3.5.3", + "vue": "2.7.8", + "vue-loader": "15.10.0" }, "dependencies": { "@fortawesome/fontawesome-free": "^5.15.4", @@ -34,11 +36,12 @@ "assert": "^2.0.0", "axios": "^0.25.0", "babel-runtime": "^6.26.0", - "backbone": "1.4.0", + "backbone": "1.4.1", "bootstrap": "4.6", "bootstrap-vue": "^2.21.2", - "citation-js": "^0.5.5", + "citation-js": "^0.6.4", "core-js": "^3.21.0", + "csv-parse": "^5.3.0", "d3": "3", "date-fns": "^2.28.0", "date-fns-tz": "^1.3.3", @@ -54,16 +57,16 @@ "jquery": "2", "jquery-migrate": "~1.4", "jquery-mousewheel": "^3.1.13", - "jquery-ui": "^1.13.1", + "jquery-ui": "^1.13.2", "jspdf": "^2.5.1", "linkify-html": "^3.0.5", "linkifyjs": "^3.0.5", "localforage": "^1.10.0", "markdown-it": "^12.3.2", "markdown-it-regexp": "^0.4.0", - "object-hash": "^2.2.0", + "object-hash": "^3.0.0", "popper.js": "^1.16.1", - "pretty-bytes": "^5.6.0", + "pretty-bytes": "^6.0.0", "pyre-to-regexp": "^0.0.5", "querystring-es3": "^0.2.1", "regenerator-runtime": "^0.13.9", @@ -80,7 +83,7 @@ "tus-js-client": "^2.3.0", "underscore": "^1.13.2", "util": "^0.12.4", - "vue": "^2.6.14", + "vue": "^2.7.8", "vue-infinite-scroll": "^2.0.2", "vue-multiselect": "^2.1.6", "vue-observe-visibility": "^1.0.0", @@ -93,7 +96,7 @@ "vuex": "^3.6.2", "vuex-cache": "^3.4.0", "vuex-persist": "2.3", - "winbox": "^0.2.1", + "winbox": "^0.2.4", "xml-beautifier": "^0.5.0" }, "scripts": { @@ -120,35 +123,35 @@ "eslint": "eslint -c .eslintrc.json --ext .js,.vue src" }, "devDependencies": { - "@babel/core": "^7.17.0", - "@babel/eslint-parser": "^7.17.0", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/core": "^7.18.9", + "@babel/eslint-parser": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.0", - "@babel/preset-env": "^7.16.11", - "@cerner/duplicate-package-checker-webpack-plugin": "^2.1.0", - "@testing-library/jest-dom": "^5.16.2", + "@babel/plugin-transform-runtime": "^7.18.9", + "@babel/preset-env": "^7.18.9", + "@cerner/duplicate-package-checker-webpack-plugin": "^2.3.0", + "@testing-library/jest-dom": "^5.16.4", "@vue/test-utils": "^1.3.0", - "@vue/vue2-jest": "^27.0.0-alpha.4", + "@vue/vue2-jest": "^28.0.1", "amdi18n-loader": "^0.9.3", - "autoprefixer": "^10.4.2", + "autoprefixer": "10.4.5", "axios-mock-adapter": "^1.20.0", "babel-core": "^7.0.0-bridge.0", - "babel-jest": "^27.4.6", - "babel-loader": "^8.2.3", - "babel-plugin-transform-inline-environment-variables": "^0.4.3", + "babel-jest": "^28.1.3", + "babel-loader": "^8.2.5", + "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-vue-template": "^0.4.2", "buffer": "^6.0.3", - "css-loader": "^6.6.0", - "css-minimizer-webpack-plugin": "^3.4.1", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", "del": "^6.0.0", - "eslint": "^8.13.0", + "eslint": "^8.20.0", "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-vue": "^8.6.0", - "expose-loader": "^3.1.0", + "eslint-plugin-vue": "^9.3.0", + "expose-loader": "^4.0.0", "gulp": "^4.0.2", "ignore-loader": "^0.1.2", - "imports-loader": "^3.1.1", + "imports-loader": "^4.0.0", "jest": "^27.4.7", "jest-location-mock": "^1.0.9", "jest-raw-loader": "^1.0.1", @@ -160,23 +163,23 @@ "karma-qunit": "^4.1.2", "karma-webpack": "^5.0.0", "mini-css-extract-plugin": "^2.5.3", - "postcss-loader": "^6.2.1", - "prettier": "^2.5.1", + "postcss-loader": "^7.0.1", + "prettier": "^2.7.1", "process": "^0.11.10", "qunit": "^2.17.2", "raw-loader": "^4.0.2", - "sass": "^1.49.7", - "sass-loader": "^12.4.0", + "sass": "^1.53.0", + "sass-loader": "^13.0.2", "sinon": "^13.0.1", "store": "^2.0.12", "style-loader": "^3.3.1", - "vue-loader": "^15.9.8", - "vue-template-compiler": "^2.6.14", - "webpack": "^5.68.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.7.4", + "vue-loader": "^15.10.0", + "vue-template-compiler": "^2.7.8", + "webpack": "^5.73.0", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.9.3", "webpack-merge": "^5.8.0", - "yaml-loader": "^0.6.0" + "yaml-loader": "^0.8.0" }, "peerDependencies": { "postcss": "^8.4.6" diff --git a/client/src/bundleEntries.js b/client/src/bundleEntries.js index 22cec84111c..470965c572a 100644 --- a/client/src/bundleEntries.js +++ b/client/src/bundleEntries.js @@ -62,7 +62,6 @@ export function multiHistory(options) { } // Previously wandering around as window.thing = thing in the onload script -export { default as panels } from "layout/panel"; export { show_in_overlay, hide_modal, show_message, show_modal, Modal } from "layout/modal"; export { make_popupmenu, make_popup_menus } from "ui/popupmenu"; export { render_embedded_items } from "mvc/embedded-objects"; @@ -75,7 +74,6 @@ export function chart(options) { } export { initMasthead } from "components/Masthead/initMasthead"; -export { panelManagement } from "onload/globalInits/panelManagement"; export { mountMakoTags } from "components/Tags"; export { mountWorkflowEditor } from "components/Workflow/Editor/mount"; export { mountPageEditor } from "components/PageEditor/mount"; diff --git a/client/src/components/AboutGalaxy.vue b/client/src/components/AboutGalaxy.vue new file mode 100644 index 00000000000..0337f516326 --- /dev/null +++ b/client/src/components/AboutGalaxy.vue @@ -0,0 +1,72 @@ + + + diff --git a/client/src/components/Dataset/DatasetList.vue b/client/src/components/Dataset/DatasetList.vue index 6c9a7a4b8e3..5cfec7500a7 100644 --- a/client/src/components/Dataset/DatasetList.vue +++ b/client/src/components/Dataset/DatasetList.vue @@ -28,6 +28,7 @@ + + diff --git a/client/src/components/Form/FormInputs.vue b/client/src/components/Form/FormInputs.vue index fa2176cc988..109a2f6796e 100644 --- a/client/src/components/Form/FormInputs.vue +++ b/client/src/components/Form/FormInputs.vue @@ -28,8 +28,8 @@