From d9cd1fb33fe44b89caa14629ab5f804c67f3a0ec Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:17:50 -0500 Subject: [PATCH 01/17] Remove Manifest.toml --- Manifest.toml | 241 -------------------------------------------------- 1 file changed, 241 deletions(-) delete mode 100644 Manifest.toml diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index 269e2b2..0000000 --- a/Manifest.toml +++ /dev/null @@ -1,241 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -[[ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" - -[[Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[Automa]] -deps = ["DataStructures", "Printf", "Random", "Test", "TranscodingStreams"] -git-tree-sha1 = "c81526bf5f6fb4616b4e22a3cd62ac20e255fd3c" -uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" -version = "0.8.0" - -[[Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[BioAlignments]] -deps = ["BioGenerics", "BioSequences", "BioSymbols", "IntervalTrees", "LinearAlgebra"] -git-tree-sha1 = "f610a3a965f187890edb0b1fdef4f30d77852edd" -uuid = "00701ae9-d1dc-5365-b64a-a3a3ebf5695e" -version = "2.0.0" - -[[BioGenerics]] -deps = ["TranscodingStreams"] -git-tree-sha1 = "6d3f3b474b3df2e83dc67ad12ec63aee4eb5241b" -uuid = "47718e42-2ac5-11e9-14af-e5595289c2ea" -version = "0.1.1" - -[[BioSequences]] -deps = ["BioGenerics", "BioSymbols", "Combinatorics", "IndexableBitVectors", "Printf", "Random", "StableRNGs", "Twiddle"] -git-tree-sha1 = "093ccb9211bdc71924abf8e74a0790af11da35a7" -uuid = "7e6ae17a-c86d-528c-b3b9-7f778a29fe59" -version = "2.0.5" - -[[BioSymbols]] -deps = ["Automa"] -git-tree-sha1 = "ec77888ac3e78f9d372c2b533bdb52668f9e2b09" -uuid = "3c28c6f8-a34d-59c4-9654-267d177fcfa9" -version = "4.0.4" - -[[Combinatorics]] -git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.2" - -[[Compat]] -deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] -git-tree-sha1 = "8cd7b7d1c7f6fcbe7e8743a58adf57788ec7f787" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.18.0" - -[[CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" - -[[DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "0347f23484a96d56e7096eb1f55c6975be34b11a" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.6" - -[[Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[DelimitedFiles]] -deps = ["Mmap"] -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" - -[[FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[IndexableBitVectors]] -deps = ["Random", "Test"] -git-tree-sha1 = "b7f5e42dc867b8a8654a5f899064632dac05bc82" -uuid = "1cb3b9ac-1ffd-5777-9e6b-a3d42300664d" -version = "1.0.0" - -[[InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[IntervalTrees]] -deps = ["InteractiveUtils", "Profile", "Random", "Test"] -git-tree-sha1 = "6c9fcd87677231ae293f6806fad928c216ab6658" -uuid = "524e6230-43b7-53ae-be76-1e9e4d08d11b" -version = "1.0.0" - -[[LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" - -[[LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" - -[[LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" - -[[Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[LinearAlgebra]] -deps = ["Libdl", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" - -[[Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" - -[[NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" - -[[OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" - -[[OrderedCollections]] -git-tree-sha1 = "16c08bf5dba06609fe45e30860092d6fa41fde7b" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.3.1" - -[[Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" - -[[Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[Profile]] -deps = ["Printf"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" - -[[REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[Random]] -deps = ["SHA", "Serialization"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" - -[[Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[StableRNGs]] -deps = ["Random", "Test"] -git-tree-sha1 = "b57c4216b6c163a3a9d674f6b9f7b99cdccdb959" -uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" -version = "0.1.2" - -[[Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" - -[[Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" - -[[Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.5" - -[[Twiddle]] -git-tree-sha1 = "29509c4862bfb5da9e76eb6937125ab93986270a" -uuid = "7200193e-83a8-5a55-b20d-5d36d44a0795" -version = "1.1.2" - -[[UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" - -[[libblastrampoline_jll]] -deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" - -[[nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" - -[[p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" From a1f55d1c7078bab10d65a375f97efa4f8201af66 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:19:06 -0500 Subject: [PATCH 02/17] Add Julia gitignore --- .gitignore | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29126e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Files generated by invoking Julia with --code-coverage +*.jl.cov +*.jl.*.cov + +# Files generated by invoking Julia with --track-allocation +*.jl.mem + +# System-specific files and directories generated by the BinaryProvider and BinDeps packages +# They contain absolute paths specific to the host computer, and so should not be committed +deps/deps.jl +deps/build.log +deps/downloads/ +deps/usr/ +deps/src/ + +# Build artifacts for creating documentation generated by the Documenter package +docs/build/ +docs/site/ + +# File generated by Pkg, the package manager, based on a corresponding Project.toml +# It records a fixed state of all packages used by the project. As such, it should not be +# committed for packages, but should be committed for applications that require a static +# environment. +Manifest.toml From 48470028cac6e2282daac6545ebf4bdaf9b99aa8 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:29:51 -0500 Subject: [PATCH 03/17] Add documentation workflow --- .github/workflows/Documentation.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/Documentation.yml diff --git a/.github/workflows/Documentation.yml b/.github/workflows/Documentation.yml new file mode 100644 index 0000000..c88c74a --- /dev/null +++ b/.github/workflows/Documentation.yml @@ -0,0 +1,26 @@ +name: Documentation + +on: + push: + branches: + - master + - develop + - release/.* + tags: ['*'] + pull_request: + +jobs: + docs: + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: julia-actions/setup-julia@v1 + with: + version: '1' + - run: julia --color=yes --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' + - run: julia --color=yes --project=docs docs/make.jl + env: + JULIA_PKG_SERVER: "" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} From c5b28e282fcffaf2bf2fa99bc1774869fd63144c Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:31:34 -0500 Subject: [PATCH 04/17] Add TagBot workflow --- .github/workflows/TagBot.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/workflows/TagBot.yml diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml new file mode 100644 index 0000000..f49313b --- /dev/null +++ b/.github/workflows/TagBot.yml @@ -0,0 +1,15 @@ +name: TagBot +on: + issue_comment: + types: + - created + workflow_dispatch: +jobs: + TagBot: + if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' + runs-on: ubuntu-latest + steps: + - uses: JuliaRegistries/TagBot@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + ssh: ${{ secrets.DOCUMENTER_KEY }} From 6e2eab42c7a7d23fccc78bd0c9dd22dd5659c17d Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:42:26 -0500 Subject: [PATCH 05/17] Add unit testing workflow --- .github/workflows/UnitTests.yml | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/UnitTests.yml diff --git a/.github/workflows/UnitTests.yml b/.github/workflows/UnitTests.yml new file mode 100644 index 0000000..2803b3f --- /dev/null +++ b/.github/workflows/UnitTests.yml @@ -0,0 +1,61 @@ +name: Unit Tests + +on: + - push + - pull_request + +jobs: + test: + name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + julia-version: + - '1.6' + - '1' + - 'nightly' + julia-arch: + - x64 + - x86 + os: + - ubuntu-latest + - windows-latest + - macOS-latest + exclude: + - os: macOS-latest + julia-arch: x86 + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Setup Julia + uses: julia-actions/setup-julia@v1 + with: + version: ${{ matrix.julia-version }} + arch: ${{ matrix.julia-arch }} + - name: Cache artifacts + uses: actions/cache@v3 + env: + cache-name: cache-artifacts + with: + path: ~/.julia/artifacts + key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} + restore-keys: | + ${{ runner.os }}-test-${{ env.cache-name }}- + ${{ runner.os }}-test- + ${{ runner.os }}- + - name: Build package + uses: julia-actions/julia-buildpkg@v1 + - name: Run tests + uses: julia-actions/julia-runtest@v1 + - name: Create CodeCov + uses: julia-actions/julia-processcoverage@v1 + - name: Upload CodeCov + uses: codecov/codecov-action@v1 + with: + file: lcov.info + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false + token: ${{ secrets.CODECOV_TOKEN }} From 23f75aad22978dc5297a179fa99352d05d66dbb9 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:42:35 -0500 Subject: [PATCH 06/17] Add CompatHelper workflow --- .github/workflows/CompatHelper.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/CompatHelper.yml diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml new file mode 100644 index 0000000..cba9134 --- /dev/null +++ b/.github/workflows/CompatHelper.yml @@ -0,0 +1,16 @@ +name: CompatHelper +on: + schedule: + - cron: 0 0 * * * + workflow_dispatch: +jobs: + CompatHelper: + runs-on: ubuntu-latest + steps: + - name: Pkg.add("CompatHelper") + run: julia -e 'using Pkg; Pkg.add("CompatHelper")' + - name: CompatHelper.main() + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} + run: julia -e 'using CompatHelper; CompatHelper.main()' From 72611659f1ea549d41197bc10bdee098320ce501 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:43:35 -0500 Subject: [PATCH 07/17] Install JuliaRegistrator --- .github/workflows/register.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/register.yml diff --git a/.github/workflows/register.yml b/.github/workflows/register.yml new file mode 100644 index 0000000..6e71f2f --- /dev/null +++ b/.github/workflows/register.yml @@ -0,0 +1,14 @@ +name: Register Package +on: + workflow_dispatch: + inputs: + version: + description: Version to register or component to bump + required: true +jobs: + register: + runs-on: ubuntu-latest + steps: + - uses: julia-actions/RegisterAction@latest + with: + token: ${{ secrets.GITHUB_TOKEN }} From e4300d020aa2d6801db8af4657bf9d1b0d17b416 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:04:52 -0500 Subject: [PATCH 08/17] Add bug report template --- .github/ISSUE_TEMPLATE/bug.yml | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug.yml diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..8ff3440 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,59 @@ +name: Bug +description: Bug report + +body: + + - type: markdown + attributes: + value: "> _This template is rather extensive. Fill out all that you can, if are a new contributor or you're unsure about any section, leave it unchanged and a reviewer will help you_ :smile:." + + - type: textarea + validations: + required: true + attributes: + label: Expected behavior + description: Tell us what you expect to happen + + - type: textarea + validations: + required: true + attributes: + label: Current behavior + description: Tell us what happens instead of the expected behavior + + - type: textarea + attributes: + label: Possible solution + description: Suggest a fix/reason for the bug (optional) + + - type: textarea + validations: + required: true + attributes: + label: Steps to reproduce + description: You may include copy-pasteable snippets or a list of steps to reproduce the bug + + - type: textarea + attributes: + label: Context + description: How has this issue affected you? What are you trying to accomplish? Providing context helps us come up with a solution that is most useful in the real world. + + - type: input + attributes: + label: Package version used + + - type: input + attributes: + label: Julia version used + + - type: input + attributes: + label: Operating system and version + + - type: input + attributes: + label: Link to your project + + - type: textarea + attributes: + label: Please list installed packages here From 15420d4f52afe332d81c40b5ba72dfda500662f5 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:05:00 -0500 Subject: [PATCH 09/17] Add feature request template --- .github/ISSUE_TEMPLATE/change.yml | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/change.yml diff --git a/.github/ISSUE_TEMPLATE/change.yml b/.github/ISSUE_TEMPLATE/change.yml new file mode 100644 index 0000000..ce6cdc5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/change.yml @@ -0,0 +1,38 @@ +name: Change +description: Change/improvement suggestion + +body: + + - type: markdown + attributes: + value: "> _This template is rather extensive. Fill out all that you can, if are a new contributor or you're unsure about any section, leave it unchanged and a reviewer will help you_ :smile:." + + - type: textarea + validations: + required: true + attributes: + label: Expected behavior + description: Tell us how it should work + + - type: textarea + validations: + required: true + attributes: + label: Current behavior + description: Explain the difference from current behavior + + - type: textarea + validations: + required: true + attributes: + label: Possible implementation + description: Suggest ideas how to implement the addition or change + + - type: textarea + attributes: + label: Context + description: How has this issue affected you? What are you trying to accomplish? Providing context helps us come up with a solution that is most useful in the real world. + + - type: input + attributes: + label: Link to your project From 39f3de83ad7519425a59a1b8cf935641396cc815 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:07:49 -0500 Subject: [PATCH 10/17] Add pull request template --- .github/PULL_REQUEST_TEMPLATE.md | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..4f23e7b --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,47 @@ +# A clear and descriptive title (No issue numbers please) + +> _This template is rather extensive. Fill out all that you can, if are a new contributor or you're unsure about any section, leave it unchanged and a reviewer will help you_ :smile:. _This template is simply a tool to help everyone remember the BioJulia guidelines, if you feel anything in this template is not relevant, simply delete it._ + +## Types of changes + +This PR implements the following changes: +_(Please tick any or all of the following that are applicable)_ + +- [ ] :sparkles: New feature (A non-breaking change which adds functionality). +- [ ] :bug: Bug fix (A non-breaking change, which fixes an issue). +- [ ] :boom: Breaking change (fix or feature that would cause existing functionality to change). + +## :clipboard: Additional detail + +- If you have implemented new features or behaviour + - **Provide a description of the addition** in as many details as possible. + + - **Provide justification of the addition**. + + - **Provide a runnable example of use of your addition**. This lets reviewers + and others try out the feature before it is merged or makes it's way to release. + +- If you have changed current behaviour... + - **Describe the behaviour prior to you changes** + + - **Describe the behaviour after your changes** and justify why you have made the changes, + Please describe any breakages you anticipate as a result of these changes. + + - **Does your change alter APIs or existing exposed methods/types?** + If so, this may cause dependency issues and breakages, so the maintainer + will need to consider this when versioning the next release. + + - If you are implementing changes that are intended to increase performance, you + should provide the results of a simple performance benchmark exercise + demonstrating the improvement. Especially if the changes make code less legible. + +## :ballot_box_with_check: Checklist + +- [ ] :art: The changes implemented is consistent with the [julia style guide](https://docs.julialang.org/en/v1/manual/style-guide/). +- [ ] :blue_book: I have updated and added relevant docstrings, in a manner consistent with the [documentation styleguide](https://docs.julialang.org/en/v1/manual/documentation/). +- [ ] :blue_book: I have added or updated relevant user and developer manuals/documentation in `docs/src/`. +- [ ] :ok: There are unit tests that cover the code changes I have made. +- [ ] :ok: The unit tests cover my code changes AND they pass. +- [ ] :pencil: I have added an entry to the `[UNRELEASED]` section of the manually curated `CHANGELOG.md` file for this repository. +- [ ] :ok: All changes should be compatible with the latest stable version of Julia. +- [ ] :thought_balloon: I have commented liberally for any complex pieces of internal code. From 4ef7ba4450082ac3013a5cdc425dce78a1b8a812 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:09:40 -0500 Subject: [PATCH 11/17] Run DocumenterTools.generate() --- docs/.gitignore | 2 ++ docs/Project.toml | 2 ++ docs/make.jl | 15 +++++++++++++++ docs/src/index.md | 3 +++ 4 files changed, 22 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/Project.toml create mode 100644 docs/make.jl create mode 100644 docs/src/index.md diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..a303fff --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,2 @@ +build/ +site/ diff --git a/docs/Project.toml b/docs/Project.toml new file mode 100644 index 0000000..dfa65cd --- /dev/null +++ b/docs/Project.toml @@ -0,0 +1,2 @@ +[deps] +Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" diff --git a/docs/make.jl b/docs/make.jl new file mode 100644 index 0000000..d20f2b3 --- /dev/null +++ b/docs/make.jl @@ -0,0 +1,15 @@ +using Documenter +using SequenceVariation + +makedocs( + sitename = "SequenceVariation", + format = Documenter.HTML(), + modules = [SequenceVariation] +) + +# Documenter can also automatically deploy documentation to gh-pages. +# See "Hosting Documentation" and deploydocs() in the Documenter manual +# for more information. +#=deploydocs( + repo = "" +)=# diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 0000000..9a90589 --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,3 @@ +# SequenceVariation.jl + +Documentation for SequenceVariation.jl From 3d03740741310f34462707c8322a0be01a47b8eb Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:34:21 -0500 Subject: [PATCH 12/17] Update documentation --- docs/Project.toml | 4 +++ docs/make.jl | 25 ++++++++++------ docs/src/api.md | 12 ++++++++ docs/src/index.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 docs/src/api.md diff --git a/docs/Project.toml b/docs/Project.toml index dfa65cd..b284c6f 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,2 +1,6 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" + +[compat] +Documenter = "0.27" diff --git a/docs/make.jl b/docs/make.jl index d20f2b3..e723972 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,15 +1,22 @@ +using Pkg using Documenter using SequenceVariation -makedocs( - sitename = "SequenceVariation", +makedocs(; + checkdocs = :exports, + linkcheck = true, + sitename = "SequenceVariation.jl", format = Documenter.HTML(), - modules = [SequenceVariation] + modules = [SequenceVariation], + pages = [ + "Home" => "index.md", + "API Reference" => "api.md", + ], + authors = replace(join(Pkg.TOML.parsefile("Project.toml")["authors"], ", "), r" <.*?>" => "" ) * ", The BioJulia Organisation, and other contributors." ) -# Documenter can also automatically deploy documentation to gh-pages. -# See "Hosting Documentation" and deploydocs() in the Documenter manual -# for more information. -#=deploydocs( - repo = "" -)=# +deploydocs( + repo = "github.com/BioJulia/SequenceVariation.jl.git", + devbranch = "master", + push_preview = true, +) diff --git a/docs/src/api.md b/docs/src/api.md new file mode 100644 index 0000000..548c73f --- /dev/null +++ b/docs/src/api.md @@ -0,0 +1,12 @@ +```@meta +CurrentModule = SequenceVariation +DocTestSetup = quote + using SequenceVariation +end +``` + +# API Reference + +```@autodocs +Modules = SequenceVariation +``` diff --git a/docs/src/index.md b/docs/src/index.md index 9a90589..c454b95 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,3 +1,73 @@ # SequenceVariation.jl -Documentation for SequenceVariation.jl +[![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) +[![Latest Release](https://img.shields.io/github/release/BioJulia/SequenceVariation.jl.svg)](https://github.com/BioJulia/SequenceVariation.jl/releases/latest) +[![MIT license](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/BioJulia/SequenceVariation.jl/blob/master/LICENSE) +[![Stable documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://biojulia.github.io/SequenceVariation.jl/stable) +[![Latest documentation](https://img.shields.io/badge/docs-dev-blue.svg)](https://biojulia.github.io/SequenceVariation.jl/dev/) + +> This project follows the [semver](https://semver.org) _pro forma_ and uses the [OneFlow branching model](https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow). + +## Description + +SequenceVariation provides a Julia vocabulary for comparing genetic mutations within biological sequences. + +## Installation + +You can install SequenceVariation from the [Julia REPL](https://docs.julialang.org/en/v1/manual/getting-started/). +Press `]` to enter [pkg mode](https://docs.julialang.org/en/v1/stdlib/Pkg/), and enter the following: + +```julia +add https://github.com/SequenceVariation.jl +``` + +## Testing + +SequenceVariation is tested against Julia `1.X` on Linux, OS X, and Windows. + +**Latest build status:** + +[![Unit tests](https://github.com/BioJulia/SequenceVariation.jl/workflows/Unit%20tests/badge.svg?branch=master)](https://github.com/BioJulia/SequenceVariation.jl/actions?query=workflow%3A%22Unit+tests%22+branch%3Amaster) +[![Documentation](https://github.com/BioJulia/SequenceVariation.jl/workflows/Documentation/badge.svg?branch=master)](https://github.com/BioJulia/SequenceVariation.jl/actions?query=workflow%3ADocumentation+branch%3Amaster) +[![codecov](https://codecov.io/gh/BioJulia/SequenceVariation.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/BioJulia/SequenceVariation.jl) + +## Contributing + +We appreciate [contributions](https://github.com/BioJulia/SequenceVariation.jl/graphs/contributors) from users including reporting bugs, fixing issues, improving performance and adding new features. + +Take a look at the [contributing files](https://github.com/BioJulia/Contributing) for detailed contributor and maintainer guidelines, and code of conduct. + +### Financial contributions + +We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/biojulia). +Anyone can file an expense. +If the expense makes sense for the development the core contributors and the person who filed the expense will be reimbursed. + + +## Backers & Sponsors + +Thank you to all our backers and sponsors! + +Love our work and community? [Become a backer](https://opencollective.com/biojulia#backer). + +[![backers](https://opencollective.com/biojulia/backers.svg?width=890)](https://opencollective.com/biojulia#backers) + +Does your company use BioJulia? +Help keep BioJulia feature rich and healthy by [sponsoring the project](https://opencollective.com/biojulia#sponsor). +Your logo will show up here with a link to your website. + +[![](https://opencollective.com/biojulia/sponsor/0/avatar.svg)](https://opencollective.com/biojulia/sponsor/0/website) +[![](https://opencollective.com/biojulia/sponsor/1/avatar.svg)](https://opencollective.com/biojulia/sponsor/1/website) +[![](https://opencollective.com/biojulia/sponsor/2/avatar.svg)](https://opencollective.com/biojulia/sponsor/2/website) +[![](https://opencollective.com/biojulia/sponsor/3/avatar.svg)](https://opencollective.com/biojulia/sponsor/3/website) +[![](https://opencollective.com/biojulia/sponsor/4/avatar.svg)](https://opencollective.com/biojulia/sponsor/4/website) +[![](https://opencollective.com/biojulia/sponsor/5/avatar.svg)](https://opencollective.com/biojulia/sponsor/5/website) +[![](https://opencollective.com/biojulia/sponsor/6/avatar.svg)](https://opencollective.com/biojulia/sponsor/6/website) +[![](https://opencollective.com/biojulia/sponsor/7/avatar.svg)](https://opencollective.com/biojulia/sponsor/7/website) +[![](https://opencollective.com/biojulia/sponsor/8/avatar.svg)](https://opencollective.com/biojulia/sponsor/8/website) +[![](https://opencollective.com/biojulia/sponsor/9/avatar.svg)](https://opencollective.com/biojulia/sponsor/9/website) + + +## Questions? + +If you have a question about contributing or using BioJulia software, come on over and chat to us on [the Julia Slack workspace](https://julialang.org/slack/), or you can try the [Bio category of the Julia discourse site](https://discourse.julialang.org/c/domain/bio). From a461152e555b47ae378cb38e5627ed5759548bab Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Mon, 11 Jul 2022 13:24:38 -0500 Subject: [PATCH 13/17] Add Thomas Christensen as author in Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 49b3659..f547c21 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "SequenceVariation" uuid = "eef6e190-9969-4f06-a38f-35a110a8fdc8" -authors = ["Jakob Nybo Nissen "] +authors = ["Jakob Nybo Nissen ", "Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com>"] version = "0.1.0" [deps] From f7f9e3190c49da078b9d84ec83b694edf32bcad9 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Mon, 11 Jul 2022 13:25:22 -0500 Subject: [PATCH 14/17] Add compat section for all dependencies to Project.toml --- Project.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Project.toml b/Project.toml index f547c21..16b268b 100644 --- a/Project.toml +++ b/Project.toml @@ -9,6 +9,13 @@ BioGenerics = "47718e42-2ac5-11e9-14af-e5595289c2ea" BioSequences = "7e6ae17a-c86d-528c-b3b9-7f778a29fe59" BioSymbols = "3c28c6f8-a34d-59c4-9654-267d177fcfa9" +[compat] +BioAlignments = "2.0.0" +BioGenerics = "0.1" +BioSequences = "2" +BioSymbols = "4" +julia = "1.6" + [extras] BioAlignments = "00701ae9-d1dc-5365-b64a-a3a3ebf5695e" BioSequences = "7e6ae17a-c86d-528c-b3b9-7f778a29fe59" From e8bb2f6f8ef6d0afca38b06ab3f360b6c67279e6 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:45:51 -0500 Subject: [PATCH 15/17] Add license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..346dcf2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Jakob Nybo Nissen, Thomas A. Christensen II and other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 60cf5c1b0a8c990f84b2bdde850e469750dd9f24 Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:53:34 -0500 Subject: [PATCH 16/17] Add a changelog --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..61da4e8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Mutation types (`Substitution`, `Deletion`, `Insertion`) +- `Variant` type to store groups of mutations together +- `Variation` type to store and compare individual mutations +- `reconstruct!` function to build mutated sequences from `Variant`s +- `Variant` constructor to automatically detect mutations from a `BioAlignments.PairwiseAlignment` + +[unreleased]: https://github.com/BioJulia/SequenceVariation.jl From 2ccc2551f57750922c279785c7f48997241aa40d Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Tue, 5 Jul 2022 10:59:27 -0500 Subject: [PATCH 17/17] Add README --- README.md | 73 +++++++++++++++++++++++++++++++++++++++ docs/src/assets/logo.png | Bin 0 -> 18425 bytes 2 files changed, 73 insertions(+) create mode 100644 README.md create mode 100644 docs/src/assets/logo.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ed73b0 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# SequenceVariation + +[![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) +[![Latest Release](https://img.shields.io/github/release/BioJulia/SequenceVariation.jl.svg)](https://github.com/BioJulia/SequenceVariation.jl/releases/latest) +[![MIT license](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/BioJulia/SequenceVariation.jl/blob/master/LICENSE) +[![Stable documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://biojulia.github.io/SequenceVariation.jl/stable) +[![Latest documentation](https://img.shields.io/badge/docs-dev-blue.svg)](https://biojulia.github.io/SequenceVariation.jl/dev/) + +> This project follows the [semver](https://semver.org) _pro forma_ and uses the [OneFlow branching model](https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow). + +## Description + +SequenceVariation provides a Julia vocabulary for comparing genetic mutations within biological sequences. + +## Installation + +You can install SequenceVariation from the [Julia REPL](https://docs.julialang.org/en/v1/manual/getting-started/). +Press `]` to enter [pkg mode](https://docs.julialang.org/en/v1/stdlib/Pkg/), and enter the following: + +```julia +add https://github.com/SequenceVariation.jl +``` + +## Testing + +SequenceVariation is tested against Julia `1.X` on Linux, OS X, and Windows. + +**Latest build status:** + +[![Unit tests](https://github.com/BioJulia/SequenceVariation.jl/workflows/Unit%20tests/badge.svg?branch=master)](https://github.com/BioJulia/SequenceVariation.jl/actions?query=workflow%3A%22Unit+tests%22+branch%3Amaster) +[![Documentation](https://github.com/BioJulia/SequenceVariation.jl/workflows/Documentation/badge.svg?branch=master)](https://github.com/BioJulia/SequenceVariation.jl/actions?query=workflow%3ADocumentation+branch%3Amaster) +[![codecov](https://codecov.io/gh/BioJulia/SequenceVariation.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/BioJulia/SequenceVariation.jl) + +## Contributing + +We appreciate [contributions](https://github.com/BioJulia/SequenceVariation.jl/graphs/contributors) from users including reporting bugs, fixing issues, improving performance and adding new features. + +Take a look at the [contributing files](https://github.com/BioJulia/Contributing) for detailed contributor and maintainer guidelines, and code of conduct. + +### Financial contributions + +We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/biojulia). +Anyone can file an expense. +If the expense makes sense for the development the core contributors and the person who filed the expense will be reimbursed. + + +## Backers & Sponsors + +Thank you to all our backers and sponsors! + +Love our work and community? [Become a backer](https://opencollective.com/biojulia#backer). + +[![backers](https://opencollective.com/biojulia/backers.svg?width=890)](https://opencollective.com/biojulia#backers) + +Does your company use BioJulia? +Help keep BioJulia feature rich and healthy by [sponsoring the project](https://opencollective.com/biojulia#sponsor). +Your logo will show up here with a link to your website. + +[![](https://opencollective.com/biojulia/sponsor/0/avatar.svg)](https://opencollective.com/biojulia/sponsor/0/website) +[![](https://opencollective.com/biojulia/sponsor/1/avatar.svg)](https://opencollective.com/biojulia/sponsor/1/website) +[![](https://opencollective.com/biojulia/sponsor/2/avatar.svg)](https://opencollective.com/biojulia/sponsor/2/website) +[![](https://opencollective.com/biojulia/sponsor/3/avatar.svg)](https://opencollective.com/biojulia/sponsor/3/website) +[![](https://opencollective.com/biojulia/sponsor/4/avatar.svg)](https://opencollective.com/biojulia/sponsor/4/website) +[![](https://opencollective.com/biojulia/sponsor/5/avatar.svg)](https://opencollective.com/biojulia/sponsor/5/website) +[![](https://opencollective.com/biojulia/sponsor/6/avatar.svg)](https://opencollective.com/biojulia/sponsor/6/website) +[![](https://opencollective.com/biojulia/sponsor/7/avatar.svg)](https://opencollective.com/biojulia/sponsor/7/website) +[![](https://opencollective.com/biojulia/sponsor/8/avatar.svg)](https://opencollective.com/biojulia/sponsor/8/website) +[![](https://opencollective.com/biojulia/sponsor/9/avatar.svg)](https://opencollective.com/biojulia/sponsor/9/website) + + +## Questions? + +If you have a question about contributing or using BioJulia software, come on over and chat to us on [the Julia Slack workspace](https://julialang.org/slack/), or you can try the [Bio category of the Julia discourse site](https://discourse.julialang.org/c/domain/bio). diff --git a/docs/src/assets/logo.png b/docs/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e78054ea0f8869b93305a73e0e4ef264300208e3 GIT binary patch literal 18425 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 BRk#2E literal 0 HcmV?d00001