diff --git a/.github/workflows/qiita-ci.yml b/.github/workflows/qiita-ci.yml
index 7da130fbd..181970579 100644
--- a/.github/workflows/qiita-ci.yml
+++ b/.github/workflows/qiita-ci.yml
@@ -96,6 +96,7 @@ jobs:
export REDBIOM_HOST="http://localhost:7379"
pip install . --no-binary redbiom
+ conda install -c conda-forge --yes biom-format
pwd
mkdir ~/.qiita_plugins
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c142b0e6..e228af36a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,21 @@
# Qiita changelog
+Version 2022.04
+---------------
+
+* Moved from Python 3.6 to 3.9.
+* Added support for Pandas 1.4.0, [details here](https://github.com/qiita-spots/qiita/pull/3174).
+* Updated all available JavaScript libraries, [details here](https://github.com/qiita-spots/qiita/pull/3177).
+* Users can select which metadata to use when creating a new analysis. By default only overlapping metadata in all studies is selected.
+* Now we can fully delete users in the backend.
+* Updated documentation to reflect the new EMPO version 2.
+* Fixed outstanding issues to add default workflow to a preparation, [details here](https://github.com/qiita-spots/qiita/issues/3158).
+* Fixed the following issues: [3183](https://github.com/qiita-spots/qiita/issues/3183), [3182](https://github.com/qiita-spots/qiita/issues/3182), [3170](https://github.com/qiita-spots/qiita/issues/3170), [3193](https://github.com/qiita-spots/qiita/pull/3193).
+* We deprecated the use of specimen_id from Qiita; this is no longer required in the backend or the GUI.
+* Moved [qp-fastp-minimap2](https://github.com/qiita-spots/qp-fastp-minimap2/) to per sample parallelization. Now an iSeq processing takes ~20min, while before it took close to 2hrs.
+* Fixed the following issues [qp-knight-lab-processing #15](https://github.com/qiita-spots/qp-knight-lab-processing/issues/15), [qp-knight-lab-processing #16](https://github.com/qiita-spots/qp-knight-lab-processing/issues/16), [qp-knight-lab-processing #17](https://github.com/qiita-spots/qp-knight-lab-processing/issues/17), [qp-knight-lab-processing #19](https://github.com/qiita-spots/qp-knight-lab-processing/issues/19), [mg-scripts #60](https://github.com/biocore/mg-scripts/issues/60), [mg-scripts #62](https://github.com/biocore/mg-scripts/issues/62) from the [Knight Lab Sequence Processing Pipeline](https://github.com/qiita-spots/qp-knight-lab-processing).
+
+
Version 2021.11
---------------
diff --git a/qiita_core/__init__.py b/qiita_core/__init__.py
index eae6d2551..17d2f32f9 100644
--- a/qiita_core/__init__.py
+++ b/qiita_core/__init__.py
@@ -6,4 +6,4 @@
# The full license is in the file LICENSE, distributed with this software.
# -----------------------------------------------------------------------------
-__version__ = "2021.11"
+__version__ = "2022.04"
diff --git a/qiita_db/__init__.py b/qiita_db/__init__.py
index f5b72f836..32be405fa 100644
--- a/qiita_db/__init__.py
+++ b/qiita_db/__init__.py
@@ -27,7 +27,7 @@
from . import user
from . import processing_job
-__version__ = "2021.11"
+__version__ = "2022.04"
__all__ = ["analysis", "artifact", "archive", "base", "commands",
"environment_manager", "exceptions", "investigation", "logger",
diff --git a/qiita_db/analysis.py b/qiita_db/analysis.py
index b21f10a1b..137bd78d9 100644
--- a/qiita_db/analysis.py
+++ b/qiita_db/analysis.py
@@ -1086,12 +1086,12 @@ def _build_mapping_file(self, samples, rename_dup_samples=False,
if si not in sample_infos:
si_df = si.to_dataframe()
if categories is not None:
- si_df = si_df[categories & set(si_df.columns)]
+ si_df = si_df[set(categories) & set(si_df.columns)]
sample_infos[si] = si_df
pt = artifact.prep_templates[0]
pt_df = pt.to_dataframe()
if categories is not None:
- pt_df = pt_df[categories & set(pt_df.columns)]
+ pt_df = pt_df[set(categories) & set(pt_df.columns)]
qm = pt_df.join(sample_infos[si], lsuffix="_prep")
diff --git a/qiita_pet/__init__.py b/qiita_pet/__init__.py
index eae6d2551..17d2f32f9 100644
--- a/qiita_pet/__init__.py
+++ b/qiita_pet/__init__.py
@@ -6,4 +6,4 @@
# The full license is in the file LICENSE, distributed with this software.
# -----------------------------------------------------------------------------
-__version__ = "2021.11"
+__version__ = "2022.04"
diff --git a/qiita_pet/handlers/analysis_handlers/base_handlers.py b/qiita_pet/handlers/analysis_handlers/base_handlers.py
index 8000d3884..a063d64f8 100644
--- a/qiita_pet/handlers/analysis_handlers/base_handlers.py
+++ b/qiita_pet/handlers/analysis_handlers/base_handlers.py
@@ -27,6 +27,9 @@ def post(self):
desc = self.get_argument('description')
mdsi = self.get_argument('merge_duplicated_sample_ids', False)
metadata = self.request.arguments.get('analysis-metadata', None)
+ # we need to change from bytes to strings
+ if metadata is not None:
+ metadata = [m.decode('utf-8') for m in metadata]
if mdsi in (b'on', 'on'):
mdsi = True
diff --git a/qiita_pet/handlers/api_proxy/__init__.py b/qiita_pet/handlers/api_proxy/__init__.py
index a00b812af..28c6acb66 100644
--- a/qiita_pet/handlers/api_proxy/__init__.py
+++ b/qiita_pet/handlers/api_proxy/__init__.py
@@ -38,7 +38,7 @@
from .user import (user_jobs_get_req)
from .util import check_access, check_fp
-__version__ = "2021.11"
+__version__ = "2022.04"
__all__ = ['prep_template_summary_get_req', 'data_types_get_req',
'study_get_req', 'sample_template_filepaths_get_req',
diff --git a/qiita_pet/templates/analysis_selected.html b/qiita_pet/templates/analysis_selected.html
index a5915a89f..9543a81b8 100644
--- a/qiita_pet/templates/analysis_selected.html
+++ b/qiita_pet/templates/analysis_selected.html
@@ -72,16 +72,20 @@
if (is_sample) {
if (jQuery.inArray(option.text, common_sample_fields) >= 0) {
option.selected=true;
- $('#analysis-metadata').append(
- $('