diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8eac247164e5a0..95c390ffa5985b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,30 +37,23 @@ jobs: - uses: ruby/setup-ruby@v1 with: ruby-version: "3.2" - - uses: actions/setup-node@v4 - with: - node-version: '19' - uses: actions/cache@v4 with: path: | vendor/bundle - ~/.npm - key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}- restore-keys: | - ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}-node- ${{ runner.os }}-gems- - name: Install dependencies run: | - sudo apt-get install -y build-essential libxi-dev libglu1-mesa-dev libglew-dev pkg-config # for node gem install bundler bundle config path vendor/bundle bundle install --jobs 4 --retry 3 - npm install bundle pristine ffi # END Dependencies - - name: Build the site - run: bundle exec jekyll build --strict_front_matter -d _site/training-material --trace + - name: Ensure that the site builds + run: bundle exec jekyll build --strict_front_matter -d _site/training-material --trace --future - name: Validate all links, enforce alt text run: | @@ -72,11 +65,11 @@ jobs: --enforce-https=false \ ./_site - - name: Ensure no unexpected encoded HTML in output + - name: Ensure no unexpected encoded HTML in output, ask a GTN contributor for help with this one. run: | ! fgrep -R 'lt;blockquote' _site - - name: Ensure no poorly rendered FAQs + - name: Ensure no poorly rendered FAQs, generally this is fixed by removing whitespace/blank lines from the frontmatter run: | ! fgrep -R -A2 -B2 'box_type:' _site/ @@ -88,24 +81,6 @@ jobs: run: | ! fgrep -R 'site.pages' _site - - name: Run aXe accessibility testing on some representative URLs - run: | - node_modules/.bin/http-server _site/ & - # We can focus AND scroll these regions. I thus disable their violation warning. - # Twitter isn't our fault. Sorry. - node_modules/.bin/axe --disable scrollable-region-focusable --exclude '#twitter-widget-0' --chromedriver-path /usr/bin/chromedriver \ - http://localhost:8080/training-material/ \ - http://localhost:8080/training-material/hall-of-fame/ \ - http://localhost:8080/training-material/hall-of-fame/hexylena/ \ - http://localhost:8080/training-material/topics/introduction/ \ - http://localhost:8080/training-material/topics/statistics/ \ - http://localhost:8080/training-material/topics/genome-annotation/ \ - http://localhost:8080/training-material/topics/admin/ \ - http://localhost:8080/training-material/topics/dev/ \ - http://localhost:8080/training-material/topics/introduction/tutorials/galaxy-intro-short/tutorial.html \ - http://localhost:8080/training-material/topics/introduction/tutorials/galaxy-intro-short/workflows/ \ - http://localhost:8080/training-material/topics/admin/tutorials/ansible-galaxy/tutorial.html - - name: Validate notebooks (If this fails, ask @hexylena to look at your notebook) run: | find _site | grep ipynb | xargs bundle exec ruby bin/check-valid-notebook.rb diff --git a/_includes/contributor-quilt.html b/_includes/contributor-quilt.html new file mode 100644 index 00000000000000..e41383dbe1802a --- /dev/null +++ b/_includes/contributor-quilt.html @@ -0,0 +1,12 @@ +
+
+ Thanks to our {{ site.data.contributors | size }} GTN contributors! +
+
+

+ {% for entity in site.data.contributors -%} + avatar + {%- endfor %} +

+
+
diff --git a/_includes/tutorial_list.html b/_includes/tutorial_list.html index 2e198896af33ab..5d869ba99575ee 100644 --- a/_includes/tutorial_list.html +++ b/_includes/tutorial_list.html @@ -68,7 +68,7 @@ {% endif %} {% if material.tags %} {% for tag in material.tags %} - {{ tag }} + {{ tag }} {% endfor %} {% endif %} diff --git a/bin/validate-frontmatter.rb b/bin/validate-frontmatter.rb index 2251cdecc48677..f87bf891e659fe 100755 --- a/bin/validate-frontmatter.rb +++ b/bin/validate-frontmatter.rb @@ -196,6 +196,14 @@ def self.lint_news_file(fn) data = lintable?(fn) return data if data.nil? || data.is_a?(Array) + if data.key?('cover') + if !data['cover'].start_with?('https://') + if !File.exist?(data['cover']) + errs.push("Cover image #{data['cover']} does not exist") + end + end + end + errs.push(*validate_document(data, @news_validator)) errs end diff --git a/branding/index.md b/branding/index.md index aae29563c1f7ac..97c95e0d0f1727 100644 --- a/branding/index.md +++ b/branding/index.md @@ -41,8 +41,4 @@ table img { # Contributor Quilt -
-{% for entity in site.data.contributors %} -avatar -{% endfor %} -
+{% include _includes/contributor-quilt.html %} diff --git a/learning-pathways/building_tutorials.md b/learning-pathways/building_tutorials.md index 14e227e589bb4e..a9fb1f2bf6818b 100644 --- a/learning-pathways/building_tutorials.md +++ b/learning-pathways/building_tutorials.md @@ -16,7 +16,7 @@ description: | pathway: - section: "Module 1: What is Github and why do I have to use it?" description: | - Galaxy training material is hosted on Github. Finding these materials and getting used to the ideas of submitting a 'Pull request' is a crucial starting point for developing training material in Galaxy. You may find that [searching Github on our training materials](../search2?query=github) will also provide further resources on this topic after the following module. + Galaxy training material is hosted on Github. Finding these materials and getting used to the ideas of submitting a 'Pull request' is a crucial starting point for developing training material in Galaxy. You may find that [searching Github on our training materials](../search2.html?query=github) will also provide further resources on this topic after the following module. tutorials: - name: github-interface-contribution topic: contributing diff --git a/news/_posts/2024-07-09-gcc-updates.md b/news/_posts/2024-07-09-gcc-updates.md new file mode 100644 index 00000000000000..deab8fb1191f8a --- /dev/null +++ b/news/_posts/2024-07-09-gcc-updates.md @@ -0,0 +1,43 @@ +--- +title: So many new features! GTN 2023-2024 Updates +layout: news +tags: +- gcc +- gtn infrastructure +contributions: + authorship: + - shiltemann + - hexylena + infrastructure: + - shiltemann + - hexylena + - bebatut +cover: news/images/2024-gcc-updates.png +coveralt: the title slide of the presentation titled Updates from the GTN , Galaxy Community Conference 2024 Brno, Saskia and Helena. The background consists of paper pieced flowers and a butterfly. a CC-BY-SA logo is in the top right corner. +link: "https://docs.google.com/presentation/d/1xXzd7io07KdBk-vVSh_27wlS5bzlDmGuxxpjWL2vB2w/edit?usp=sharing" +--- + +We recently [presented the GTN](https://docs.google.com/presentation/d/1xXzd7io07KdBk-vVSh_27wlS5bzlDmGuxxpjWL2vB2w/edit?usp=sharing) at the [2024 Galaxy Community Conference](https://galaxyproject.org/events/gcc2024/). This [presentation](https://docs.google.com/presentation/d/1xXzd7io07KdBk-vVSh_27wlS5bzlDmGuxxpjWL2vB2w/edit?usp=sharing) was a summary of the updates and new features that were added to the GTN in the past year. + +Many of these updates have been covered in previous blog posts on the GTN, but when you put it all in a single presentation it really becomes clear how much the community has done over the last year! + +- [Our 400th tutorial]({{ site.baseurl }}/news/2024/06/06/400-tutorials-milestone.html) +- [Perfectly FAIR training]({{ site.baseurl }}/news/2024/05/13/fair.html) +- [Teaching you to be perfectly FAIR]({{ site.baseurl }}/news/2024/03/26/FAIR-pointers.html) +- [📆 GTN Event Pages]({{ site.baseurl }}/news/2024/05/22/introducing-gtn-event-pages.html) +- [🎞 GTN Video Library]({{ site.baseurl }}/news/2024/06/14/gtn-video-library.html) +- [🗞 News feeds, automating dissemination]({{ site.baseurl }}/news/2024/06/04/gtn-standards-rss.html) +- [Training beyond the Galaxy]({% link topics/ai4life/index.md %}) + +[See the presentation]({{ page.link }}){:.btn.btn-primary} + +And we covered a few updates there are still somewhere on their journey from planning to implementation, such as: + +- WorkflowHub upload +- Maintainer Homepages +- Workflow Testing +- Automated Recordings + +We're so happy for the incredible work our massive community has done, thank you all for your contributions! + +{% include _includes/contributor-quilt.html %} diff --git a/news/_posts/2024-07-17-google-forms.md b/news/_posts/2024-07-17-google-forms.md new file mode 100644 index 00000000000000..80a35fb7b30214 --- /dev/null +++ b/news/_posts/2024-07-17-google-forms.md @@ -0,0 +1,33 @@ +--- +title: Simplifying GTN contribution with Google Forms +layout: news +tags: +- gtn infrastructure +- new feature +- automation +contributions: + authorship: + - hexylena + - shiltemann + infrastructure: + - shiltemann + - hexylena +cover: news/images/2024-google-forms.png +coveralt: A screenshot of the GTN Google Form for news contributions. The form is titled 'GTN News' and has fields for 'Title', with a screenshot of a galaxy single cell news post as the header image. +--- + +Since the last time we [announced GTN news posting via Google Form]({{ site.baseurl }}/news/2024/01/29/simplified-gtn-news-submission-via-google-form.html), we've found that this has been an excellent fit for the community and decided to greatly expand the use of Google Forms for GTN contributions. + +Our users were clear: *GitHub, pull requests, commits, and YAML files are not always a pleasant or user-friendly way to contribute.* + +After the success of news contributions via form we have expanded that process significantly. Now you can contribute the following all via Google Form: + +- [News](https://forms.gle/TqGTr6y46wrJDri7A) +- [FAQs](https://forms.gle/2JVMfd1AgtenZPvv9) +- [Recordings](https://forms.gle/qNG8FkTN1yRZPNZY6) +- [Events](https://forms.gle/M6ECp1e3pZoFGYnV8) + +## The Details + +Each of these works similarly: you fill out the form, and then in the background a GTN GitHub Action will create a pull request for you. +The GTN maintainers will review the pull request, and when everything is in order and tests pass, merge it. Your contribution will be in the GTN without you needing to learn development tooling. diff --git a/news/images/2024-gcc-updates.png b/news/images/2024-gcc-updates.png new file mode 100644 index 00000000000000..fd0ef3e6ad9ce5 Binary files /dev/null and b/news/images/2024-gcc-updates.png differ diff --git a/news/images/2024-google-forms.png b/news/images/2024-google-forms.png new file mode 100644 index 00000000000000..409e92fc91bb45 Binary files /dev/null and b/news/images/2024-google-forms.png differ diff --git a/topics/introduction/tutorials/galaxy-intro-peaks2genes/tutorial.md b/topics/introduction/tutorials/galaxy-intro-peaks2genes/tutorial.md index 9aa39cf48ca521..e29dcff873c39a 100644 --- a/topics/introduction/tutorials/galaxy-intro-peaks2genes/tutorial.md +++ b/topics/introduction/tutorials/galaxy-intro-peaks2genes/tutorial.md @@ -87,7 +87,7 @@ Let's start with a fresh history. > > > > * Click on the title of the history (by default the title is `Unnamed history`) > > -> > ![Renaming history](../../../../shared/images/rename_history.png) +> > ![Renaming history]({% link shared/images/rename_history.png %}) > > > > * Type `Galaxy Introduction` as the name > > * Press Enter diff --git a/topics/introduction/tutorials/galaxy-intro-short/tutorial.md b/topics/introduction/tutorials/galaxy-intro-short/tutorial.md index b93dd068465d1a..e04106cd9178d8 100644 --- a/topics/introduction/tutorials/galaxy-intro-short/tutorial.md +++ b/topics/introduction/tutorials/galaxy-intro-short/tutorial.md @@ -88,7 +88,7 @@ Your "History" is in the panel at the right. > 1. Go to the **History** panel (on the right) > 2. Click on {% icon galaxy-pencil %} (**Edit**) next to the history name (which by default is "Unnamed history") > -> ![Screenshot of the galaxy interface with the history name being edited, it currently reads "Unnamed history", the default value. An input box is below it.](../../../../shared/images/rename_history.png){:width="250px"} +> ![Screenshot of the galaxy interface with the history name being edited, it currently reads "Unnamed history", the default value. An input box is below it.]({% link shared/images/rename_history.png %}){:width="250px"} > > > > > diff --git a/topics/introduction/tutorials/galaxy-intro-short/tutorial_ES.md b/topics/introduction/tutorials/galaxy-intro-short/tutorial_ES.md index 139f19c20cd31d..d2afafb4c5c74a 100644 --- a/topics/introduction/tutorials/galaxy-intro-short/tutorial_ES.md +++ b/topics/introduction/tutorials/galaxy-intro-short/tutorial_ES.md @@ -81,7 +81,7 @@ Tu “Historial” está en el panel de la derecha. > 1. Ve al panel **History** (a la derecha) > 2. Haz clic en el nombre del historial (que por defecto es "Unnamed history") > -> ![name history](../../../../shared/images/rename_history.png){:width="320px"} +> ![name history]({% link shared/images/rename_history.png %}){:width="320px"} > > 3. Teclea el nuevo nombre, por ejemplo, "Mi-Analisis" > 4. Presiona Enter en tu teclado para guardar diff --git a/topics/introduction/tutorials/galaxy-intro-strands/tutorial.md b/topics/introduction/tutorials/galaxy-intro-strands/tutorial.md index 3a979d467f652b..c2f91b857becb0 100644 --- a/topics/introduction/tutorials/galaxy-intro-strands/tutorial.md +++ b/topics/introduction/tutorials/galaxy-intro-strands/tutorial.md @@ -310,7 +310,7 @@ You don't have to do this. Galaxy is quite happy for you to have an infinite nu > > 1. **Name your history** to be meaningful and easy to find. > - *Click* on the title of the history and enter something like **Intro - Strands** as the name. Hit the `enter` key on your keyboard to save it. -> ![Rename the history](../../../../shared/images/rename_history.png) +> ![Rename the history]({% link shared/images/rename_history.png %}) > 1. **Rename your dataset** > - *Click* on the **pencil icon** to edit the dataset attributes. > - In the next screen change the name of the dataset to something like `Genes` or `Genes chr22`. diff --git a/topics/statistics/tutorials/CNN/tutorial.md b/topics/statistics/tutorials/CNN/tutorial.md index 43a8498a1f1b10..c9633eebe9d2ba 100644 --- a/topics/statistics/tutorials/CNN/tutorial.md +++ b/topics/statistics/tutorials/CNN/tutorial.md @@ -220,7 +220,7 @@ to compare various Machine Learning techniques. > > > > * Click on the title of the history (by default the title is `Unnamed history`) > > -> > ![Renaming history](../../../../shared/images/rename_history.png) +> > ![Renaming history]({% link shared/images/rename_history.png %}) > > > > * Type `Galaxy Introduction` as the name > > * Press Enter diff --git a/topics/statistics/tutorials/fruit_360/tutorial.md b/topics/statistics/tutorials/fruit_360/tutorial.md index ec85d26d5c89a0..4d314d1c740970 100644 --- a/topics/statistics/tutorials/fruit_360/tutorial.md +++ b/topics/statistics/tutorials/fruit_360/tutorial.md @@ -202,7 +202,7 @@ Orange:8, Peach:9. > > > > * Click on the title of the history (by default the title is `Unnamed history`) > > -> > ![Renaming history](../../../../shared/images/rename_history.png) +> > ![Renaming history]({% link shared/images/rename_history.png %}) > > > > * Type `Galaxy Introduction` as the name > > * Press Enter @@ -255,7 +255,7 @@ train_y_10 file has 3 columns: Label_name (string representation of label), file image file), and Label (integer representation of label). We extract Label from train_y_10, and then calcuate its OHE representation. -### **Extract the Label column from train_y_10** +### Extract the Label column from train_y_10 > Advanced Cut > @@ -269,7 +269,7 @@ its OHE representation. > {: .hands_on} -### **Create One-Hot Encoding (OHE) representation of training labels** +### Create One-Hot Encoding (OHE) representation of training labels > One-Hot Encoding > @@ -281,7 +281,7 @@ its OHE representation. > {: .hands_on} -### **Create a deep learning model architecture** +### Create a deep learning model architecture > Model config > @@ -344,7 +344,7 @@ nodes and relu activation function. Finally, we add a fully connected layers wit softmax activation function to get the probability of each fruit/vegetable. Fruit/vegetable with the highest probability is predicted by CNN. The model config can be downloaded as a JSON file. -### **Create a deep learning model** +### Create a deep learning model > Model builder (Optimizer, loss function, and fit parameters) > @@ -369,7 +369,7 @@ weights/biases after all the training data is feed to the network, the training in our dataset). To speed up the training, we present only a subset of the training examples to the network, after which we update the weights/biases. *batch_size* decides the size of this subset. The model builder can be downloaded as a zip file. -### **Deep learning training and evaluation** +### Deep learning training and evaluation > Training the model > @@ -389,7 +389,7 @@ the weights/biases. *batch_size* decides the size of this subset. The model buil The training step generates 3 datasets. 1) accuracy of the trained model, 2) the trained model, downloadable as a zip file, and 3) the trained model weights, downloadable as an hdf5 file. These files are needed for prediction in the next step. -### **Model Prediction** +### Model Prediction > Testing the model > @@ -407,7 +407,7 @@ The training step generates 3 datasets. 1) accuracy of the trained model, 2) the The prediction step generates 1 dataset. It's a file that has predictions (0 to 9 for the predicted fruit/vegetable) for every image in the test dataset. -### **Machine Learning Visualization Extension** +### Machine Learning Visualization Extension > Creating the confusion matrix > diff --git a/topics/statistics/tutorials/gpu_jupyter_lab/tutorial.md b/topics/statistics/tutorials/gpu_jupyter_lab/tutorial.md index a5ddd567e75664..e154d17bfdd82a 100644 --- a/topics/statistics/tutorials/gpu_jupyter_lab/tutorial.md +++ b/topics/statistics/tutorials/gpu_jupyter_lab/tutorial.md @@ -50,10 +50,10 @@ contributors: ## Features of Jupyterlab [Jupyterlab](https://jupyterlab.readthedocs.io/en/stable/) notebook has been augmented with several useful features and together they make it ready-to-use for quick prototyping and end-to-end artificial intelligence (AI) projects. Being able to **serve online** makes it convenient to share it with other researchers and users. Its features can be broadly classified into two categories - features that have been added solely as Python packages and those that have been added also as Python packages but have their respective user interfaces. We will briefly discuss these features and later, we will use some of those for building and using AI models. -#### Features (Python packages) +### Features (Python packages) Accessibility to many features has been made possible by adding several compatible Python packages, the most prominent ones are Bioblend, [CUDA](https://developer.nvidia.com/cuda-toolkit) and ONNX. Using Bioblend the notebook can be **connected to Galaxy** and its histories, tools and workflows can be accessed and operated using various commands from the notebook. GPUs have accelerated AI research, especially deep learning. Therefore, the backend of the Jupyterlab is **powered by GPU** to make long-running AI training programs finish faster by parallelizing matrix multiplications. CUDA acts as a bridge between GPU and AI algorithms. In addition, a standard AI model format, **open neural network exchange (ONNX)**, has been supported in the notebook to transform Scikit-learn and Tensorflow models to `onnx` files. These model files can be conveniently shared and used for inference. Galaxy also supports `onnx` file format which makes it easier to interoperate such models from a notebook to Galaxy and vice-versa. Galaxy tool for **remote training** can also run on GPU. There are several additional packages, suited for performing machine learning tasks such as Scikit-learn and Tensorflow for developing AI algorithms, [Open-CV](https://github.com/opencv/opencv) and [Scikit-Image](https://scikit-image.org/) for image processing, [NiBabel](https://nipy.org/nibabel/) package for processing images files have been made available to researchers. -#### Features (Python packages with user interfaces) +### Features (Python packages with user interfaces) There are other features, added as Python packages, that have user interface components. These include **[GPU utilization dashboards](https://github.com/rapidsai/jupyterlab-nvdashboard)** for monitoring the GPU usage and system memory utilization, **[Voila](https://github.com/voila-dashboards/voila)** for rendering output cells of a notebook in a separate tab hiding all code cells, interactive **[Bqplots](https://github.com/bqplot/bqplot)** for plotting, **[Git](https://github.com/jupyterlab/jupyterlab-git)** version control to clone, commit and maintain codebase directly from the notebook and **[Elyra AI](https://elyra.readthedocs.io/en/stable/)** pipelines for knitting together multiple notebooks to create a workflow. Many notebooks are created for processing datasets in different ways. These notebooks can be knit together to form one pipeline where each notebook transforms datasets taking a different form of data from its previous notebook and passing on the transformed datasets to its next notebook. An example workflow created using Elyra AI can be found by the name "METABRIC\_ML.pipeline" in the "elyra" folder of a typical Jupyterlab instance. These pipelines can also be executed remotely on multiple "runtimes" supported by docker containers. An example pipeline created in the notebook can be seen in Figure 1. These features, integrated into the Jupyterlab notebook, are useful for the efficient execution and management of data science projects. ![Elyra AI pipeline](../../images/elyra_ai_pipeline.png "An example ML pipeline created using Elyra AI in a notebook. Each connected block of the pipeline is a different notebook") @@ -230,7 +230,7 @@ Datasets such as train, test and sample IPython (`ipynb`) notebook files are dow > > > > * Click on the title of the history (by default the title is `Unnamed history`) > > -> > ![Renaming history](../../../../shared/images/rename_history.png) +> > ![Renaming history]({% link shared/images/rename_history.png %}) > > > > * Type `Galaxy Introduction` as the name > > * Press Enter