Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
e6768bf
Modularised starsolo script
Claptar Jun 5, 2025
b1f48ab
Fixed output directory path and removed for loops in gzipping
Claptar Jun 6, 2025
58c3141
Returned original path to reference and whitelists
Claptar Jun 6, 2025
13f0270
Add usage note for species in main function
Claptar Jun 6, 2025
62c8902
Refactor starsolo_10x_auto.sh for improved readability and functionality
Claptar Jun 6, 2025
dd72aa2
Add starsolo script for unified CLI scRNA-seq processing
Feb 17, 2026
6b63199
Add default configuration file for STARsolo CLI
Feb 17, 2026
b752b60
Add platform-specific scripts for various sequencing technologies
Feb 17, 2026
da0455f
Add STARsolo wrapper scripts for various sequencing methods and a QC …
Feb 17, 2026
c05e07e
Add install script for STARsolo CLI to facilitate command setup
Feb 17, 2026
3a33eab
Update README.md to enhance clarity on `starsolo` CLI usage and suppo…
Feb 17, 2026
e6bd6c3
Add check to ensure main function runs only when script is executed d…
Feb 17, 2026
7e7bd8a
Add script to generate synthetic dataset for STARsolo CLI wrapper
Feb 17, 2026
74e7cb4
Add test dataset archive for STARsolo data validation
Feb 18, 2026
6fa511b
Add whitelists archive
Feb 18, 2026
9ceb015
Add GitHub Actions workflow for automated testing of STARsolo
Feb 18, 2026
e211604
added fails-fast option
Claptar Feb 18, 2026
f368126
Refactor GitHub Actions workflow to improve test data unpacking and r…
Claptar Feb 18, 2026
63fdf93
Refactor platform scripts to convert paths to absolute before changin…
Claptar Feb 18, 2026
aa52d0d
Simplify test data unpacking step in GitHub Actions workflow
Claptar Feb 18, 2026
181a2eb
Ensure fail-fast option is set to false in test workflow strategy
Claptar Feb 18, 2026
43370c3
Refactor test step to handle smartseq technology input conditionally
Claptar Feb 18, 2026
cb9a15e
Refactor run_smartseq function to convert manifest paths to absolute …
Claptar Feb 18, 2026
8949779
Remove temporary manifest file after processing in run_smartseq function
Claptar Feb 18, 2026
0fea315
Refactor test step to streamline smartseq input handling and remove r…
Claptar Feb 18, 2026
8de1024
Debugging this stuff
Claptar Feb 18, 2026
c1b4782
Update test data archive to reflect recent changes
Claptar Feb 18, 2026
6ff4236
Update Dockerfile to use latest versions of samtools and seqtk, and s…
Claptar Feb 18, 2026
fac6b6e
Add GitHub Actions workflow for building and pushing Docker image on …
Claptar Feb 18, 2026
06246e7
Update test workflow to ignore additional paths on push events
Claptar Feb 18, 2026
f4967da
Update Dockerfile to install pbzip2 and adjust WORKDIR for CLI execution
Claptar Feb 18, 2026
4661a2b
Refactor Dockerfile to use base image and streamline installation pro…
Claptar Feb 18, 2026
2a3609e
Update test workflow to use the correct Docker container for testing
Claptar Feb 18, 2026
ad7e559
Update Docker build workflow to specify cache-from and cache-to for i…
Claptar Feb 18, 2026
d23076a
Fallback
Claptar Feb 18, 2026
633ce4d
Refactor run_10x function to convert paths to absolute and streamline…
Claptar Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions .github/workflows/quay-on-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Build & Push Docker image on tag creation
on:
push:
tags:
- '*'

concurrency:
group: docker-${{ github.ref }}
cancel-in-progress: true

jobs:
docker:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Login to Quay
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: quay.io/cellgeni/starsolo
tags: |
type=ref,event=tag
# push "latest" only for tags WITHOUT hyphens (excludes pre-releases like v1.0-beta):
type=raw,value=latest,enable=${{ !contains(github.ref_name, '-') }}

- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: |
type=registry,ref=quay.io/cellgeni/starsolo:cache
type=gha
cache-to: type=registry,ref=quay.io/cellgeni/starsolo:cache,mode=max

57 changes: 57 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: "Test Workflow"
on:
push:
branches: [main, dev]
paths-ignore:
- 'data/whitelists.tar.gz'
- 'README.md'
- 'LICENSE'
- 'scripts/**'
- 'Dockerfile'
pull_request:
branches: [main, dev]

jobs:
test:
runs-on: ubuntu-latest
container: quay.io/cellgeni/starsolo:base
strategy:
fail-fast: false
matrix:
include:
- technology: 10x
- technology: dropseq
- technology: indrops
- technology: smartseq
- technology: rhapsody
- technology: strt
name: "Run tests for ${{ matrix.technology }}"

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Unpack test data
run: tar -xzf data/test.tar.gz

- name: Run tests
run: |
set -e
technology=${{ matrix.technology }}
if [ "$technology" = "smartseq" ]; then
bin/starsolo smartseq \
data/test/fastqs/smartseq/smartseq_example.manifest.tsv \
--ref data/test/reference/index \
--no-bam \
--cpus 1
else
bin/starsolo $technology \
data/test/fastqs/${technology} \
"$technology" \
--ref data/test/reference/index \
--whitelist-dir data/test/whitelists \
--no-bam \
--cpus 1
fi


43 changes: 27 additions & 16 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive

ARG star_version=2.7.10a_alpha_220818
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The samtools version was upgraded from 1.15.1 to 1.21. While this is a minor version upgrade within the 1.x series, it's worth noting in case there are any behavioral changes. Consider documenting this version change in the PR description or release notes, especially since the README states "Tested version: 1.15.1".

Suggested change
ARG star_version=2.7.10a_alpha_220818
ARG star_version=2.7.10a_alpha_220818
# NOTE: samtools was previously pinned to version 1.15.1 (see README: "Tested version: 1.15.1").
# This Dockerfile intentionally uses a newer minor version (1.21). Update documentation as needed
# if behavior differences are observed between these versions.

Copilot uses AI. Check for mistakes.
ARG samtools_version=1.15.1
ARG samtools_version=1.21
ARG bbmap_version=38.97
ARG rsem_version=1.3.3
ARG seqtk_version=1.4

#Install OS packages
RUN apt-get update && apt-get -y --no-install-recommends -qq install \
wget gcc build-essential software-properties-common libz-dev \
git libncurses5-dev libbz2-dev liblzma-dev default-jre bsdmainutils
git libncurses5-dev libbz2-dev liblzma-dev default-jre bsdmainutils pbzip2

#Install STAR
RUN wget --no-check-certificate https://github.com/alexdobin/STAR/archive/${star_version}.tar.gz && \
Expand All @@ -20,10 +20,11 @@ RUN wget --no-check-certificate https://github.com/alexdobin/STAR/archive/${star
cd / && rm ${star_version}.tar.gz

#Install seqtk
RUN git clone https://github.com/lh3/seqtk.git && \
mv seqtk /opt && \
cd /opt/seqtk && \
make
RUN wget --no-check-certificate https://github.com/lh3/seqtk/archive/refs/tags/v${seqtk_version}.tar.gz && \
tar -xzf v${seqtk_version}.tar.gz -C /opt && \
cd /opt/seqtk-${seqtk_version} && \
make && \
cd / && rm v${seqtk_version}.tar.gz
Comment on lines 16 to +27
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wget --no-check-certificate in the Dockerfile disables TLS certificate validation when downloading STAR and seqtk sources, so a network attacker (e.g. on a compromised proxy or mirror) can silently replace these tarballs with malicious code that will be compiled into the image. Because this image is then used to process real datasets, this becomes a supply-chain compromise vector for arbitrary code execution in all environments that build or run it. Use HTTPS with certificate validation and add an integrity check (pinned checksum or signature verification) for each downloaded artifact instead of disabling certificate checks.

Copilot uses AI. Check for mistakes.

#Install samtools
RUN wget https://github.com/samtools/samtools/releases/download/${samtools_version}/samtools-${samtools_version}.tar.bz2 && \
Expand All @@ -41,19 +42,29 @@ RUN wget https://sourceforge.net/projects/bbmap/files/BBMap_${bbmap_version}.tar
./stats.sh in=resources/phix174_ill.ref.fa.gz && \
cd / && rm BBMap_${bbmap_version}.tar.gz

#Install RSEM
RUN wget https://github.com/deweylab/RSEM/archive/refs/tags/v${rsem_version}.tar.gz && \
tar -xzf v${rsem_version}.tar.gz -C /opt && \
cd /opt/RSEM-${rsem_version} && \
make && \
cd / && rm v${rsem_version}.tar.gz
# Install this repository
COPY . /opt/STARsolo
RUN cd /opt/STARsolo &&\
rm data/test.tar.gz &&\
Copy link

Copilot AI Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Dockerfile attempts to remove data/test.tar.gz before extracting data/whitelists.tar.gz, but there's no evidence that data/test.tar.gz exists in the repository being copied. If this file doesn't exist, the rm command will fail and stop the build due to set -e behavior in Docker RUN commands. Consider using rm -f to ignore non-existent files, or verify that this file should exist.

Suggested change
rm data/test.tar.gz &&\
rm -f data/test.tar.gz &&\

Copilot uses AI. Check for mistakes.
tar -xzf data/whitelists.tar.gz &&\
./install.sh

ENV PATH="${PATH}:/opt/STAR-${star_version}/source:/opt/seqtk:/opt/bbmap:/opt/RSEM-${rsem_version}"
# Set PATH to include all binaries
ENV STARSOLO_WL_DIR=/opt/STARsolo/data/whitelists
ENV PATH="/opt/STARsolo/bin:${PATH}:/opt/STAR-${star_version}/source:/opt/seqtk-${seqtk_version}:/opt/bbmap"

#Saving Software Versions to a file
RUN echo "STAR version: ${star_version}" >> versions.txt && \
echo "samtools version: ${samtools_version}" >> versions.txt && \
echo "BBMap version: ${bbmap_version}" >> versions.txt && \
echo "RSEM version: ${rsem_version}" >> versions.txt && \
seqtk_version=`strings $(which seqtk) | grep 'Version:' | cut -f 2 -d " "` && \
echo "seqtk version: ${seqtk_version}" >> versions.txt

COPY Dockerfile /docker/
RUN chmod -R 755 /docker



# Default entrypoint: run the CLI
WORKDIR /workdir
ENTRYPOINT ["starsolo"]
CMD ["--help"]
Loading