GitHub in the Tudat Ecosystem

Introduction

Welcome to the Tudat Team on GitHub, the heartbeat of the Tudat ecosystem. This organization is the central repository for all the development and maintenance activities related to Tudat—an advanced computational framework designed to facilitate research in astrodynamics and space sciences.

GitHub Homepage of Tudat-Team

This organization leverages GitHub for Version Control System (VCS), comprehensive project management, and community engagement through discussions. Additionally, we employ GitHub Actions for a streamlined DevOps pipeline. Further details can be found in specific sections of this documentation.

GitHub Repositories

%%{ init : {"theme": "dark"} }%% graph TD %% Subgraph subgraph tudatTeam["Tudat Team on GitHub"] %% Nodes tudatBundle[Tudat Bundle] tudat[Tudat] tudatpy[TudatPy] tudatResources[Tudat Resources] sofaCmake[SOFA CMake] cspiceCmake[CSPICE CMake] nrlmsiseCmake[NRLMSISE-00 CMake] end %% Styling nodes %% style tudatTeam opacity:0.6,fill:#d3d3d3,stroke:#333,stroke-width:2px %% style tudatBundle fill:#c2e2c2,stroke:#333,stroke-width:2px %% style tudat fill:#c2d4e2,stroke:#333,stroke-width:2px %% style tudatpy fill:#c2d4e2,stroke:#333,stroke-width:2px %% style tudatResources fill:#eae4e9,stroke:#333,stroke-width:2px %% style sofaCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% style cspiceCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% style nrlmsiseCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% Connections tudatBundle -->|Depends on| tudat tudatBundle -->|Depends on| tudatpy tudatpy -->|Depends on| tudat tudat -->|Uses| tudatResources tudat -->|Uses| sofaCmake tudat -->|Uses| cspiceCmake tudat -->|Uses| nrlmsiseCmake %% Styling Connections linkStyle 0 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 1 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 2 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 3 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 4 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 5 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 6 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 %% Hyperlinks click tudatBundle "https://github.com/tudat-team/tudat-bundle" _blank click tudat "https://github.com/tudat-team/tudat" _blank click tudatpy "https://github.com/tudat-team/tudatpy" _blank click tudatResources "https://github.com/tudat-team/tudat-resources" _blank click sofaCmake "https://github.com/tudat-team/sofa-cmake" _blank click cspiceCmake "https://github.com/tudat-team/cspice-cmake" _blank click nrlmsiseCmake "https://github.com/tudat-team/nrlmsise-00-cmake" _blank
%%{ init : {"theme": "light"} }%% graph TD %% Subgraph subgraph tudatTeam["Tudat Team on GitHub"] %% Nodes tudatBundle[Tudat Bundle] tudat[Tudat] tudatpy[TudatPy] tudatResources[Tudat Resources] sofaCmake[SOFA CMake] cspiceCmake[CSPICE CMake] nrlmsiseCmake[NRLMSISE-00 CMake] end %% Styling nodes %% style tudatTeam opacity:0.6,fill:#d3d3d3,stroke:#333,stroke-width:2px %% style tudatBundle fill:#c2e2c2,stroke:#333,stroke-width:2px %% style tudat fill:#c2d4e2,stroke:#333,stroke-width:2px %% style tudatpy fill:#c2d4e2,stroke:#333,stroke-width:2px %% style tudatResources fill:#eae4e9,stroke:#333,stroke-width:2px %% style sofaCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% style cspiceCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% style nrlmsiseCmake fill:#ffdcb4,stroke:#333,stroke-width:2px %% Connections tudatBundle -->|Depends on| tudat tudatBundle -->|Depends on| tudatpy tudatpy -->|Depends on| tudat tudat -->|Uses| tudatResources tudat -->|Uses| sofaCmake tudat -->|Uses| cspiceCmake tudat -->|Uses| nrlmsiseCmake %% Styling Connections linkStyle 0 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 1 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 2 stroke:#ff6347,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 3 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 4 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 5 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 linkStyle 6 stroke:#32cd32,stroke-width:2px,stroke-dasharray: 5, 5 %% Hyperlinks click tudatBundle "https://github.com/tudat-team/tudat-bundle" _blank click tudat "https://github.com/tudat-team/tudat" _blank click tudatpy "https://github.com/tudat-team/tudatpy" _blank click tudatResources "https://github.com/tudat-team/tudat-resources" _blank click sofaCmake "https://github.com/tudat-team/sofa-cmake" _blank click cspiceCmake "https://github.com/tudat-team/cspice-cmake" _blank click nrlmsiseCmake "https://github.com/tudat-team/nrlmsise-00-cmake" _blank

Core Repositories

  • tudat-bundle: This is the primary repository for setting up a Tudat development environment. It includes all essential dependencies, making the initial setup process more straightforward and efficient.

  • tudat: The fundamental library of the Tudat ecosystem, written in C++. It offers a comprehensive suite of tools and features specifically designed for astrodynamics and space science research.

  • tudatpy: Acts as a bridge between the robust capabilities of Tudat’s C++ core and the simplicity of Python. tudatpy extends Tudat’s high-performance space research functionalities to the versatile environment of Python.

Dependencies

  • tudat-resources: Functions as a dedicated resource manager. It separates non-code assets from the main tudat repository, ensuring more efficient resource management and accessibility for the community.

  • webservices-dispatch-action: A crucial GitHub action in the Tudat ecosystem, aimed at enhancing development workflows. It simplifies complex development aspects for the tudat-team by automating various tasks related to the Tudat and tudatpy repositories.

  • sofa-cmake: Contains the SOFA ANSI C source code, supplemented with cmake files to integrate it seamlessly into Tudat. SOFA is vital for the implementation of standard astronomical models.

  • cspice-cmake: Hosts NASA’s SPICE toolkit for C programming, along with cmake files to facilitate integration with Tudat. SPICE is a key tool used in planetary science and remote sensing missions.

  • nrlmsise-00-cmake: Integrates the NRLMSISE-00 Atmospheric Model in C with additional cmake enhancements for compatibility with Tudat. This model is crucial for simulating Earth’s atmospheric conditions.

GitHub Actions

GitHub Actions is a powerful tool for automating software development workflows within GitHub repositories. These actions are stored within the directory .github/workflows of each repository. The following table summarizes the actions currently implemented in the Tudat ecosystem.

  • automerge.yml: Comes standard in all feedstock repositories. This action automatically merges pull requests that pass all checks, ensuring a streamlined and efficient development process. This is maintained by conda-forge. For more details on the automerge action, refer to the conda-forge/automerge-action repository.

    %%{ init : {"theme": "dark"} }%% flowchart LR subgraph Feedstock Repository direction LR A[Pull Request] --> B{Checks Passed?} B --> |Yes| C[Automerge] B --> |No| D[End workflow] end
    %%{ init : {"theme": "light"} }%% flowchart LR subgraph Feedstock Repository direction LR A[Pull Request] --> B{Checks Passed?} B --> |Yes| C[Automerge] B --> |No| D[End workflow] end

Workflow

Description

tudat-team/.github/webservice.yml

Adds in-house custom controls to the Tudat GitHub ecosystem by calling the webservices-dispatch-action.

tudat-team/.github/nightly.yml

Builds all dev packages, automatically incrementing versions, if any changes are detected in the develop branch of the tudat or tudatpy repositories.

tudat-team/.github/nightly.yml

%%{ init : {"theme": "dark"} }%% flowchart TD trigger1([Schedule: 0 3 * * *]) -->|triggers| Nightly trigger2([Workflow Dispatch]) -->|triggers| Nightly Nightly --> check_dependencies check_dependencies --> check_core check_core --> check_outer subgraph check_dependencies [Job: check_dependencies] %% step1_1[Rerender: conda-smithy-rerender] %% step1_2[Inform: repository-dispatch] end subgraph check_core [Job: check_core] %% step2_1[Rerender: conda-smithy-rerender] %% step2_2[Inform: repository-dispatch] end subgraph check_outer [Job: check_outer] %% step3_1[Rerender: conda-smithy-rerender] %% step3_2[Inform: repository-dispatch] end
%%{ init : {"theme": "light"} }%% flowchart TD trigger1([Schedule: 0 3 * * *]) -->|triggers| Nightly trigger2([Workflow Dispatch]) -->|triggers| Nightly Nightly --> check_dependencies check_dependencies --> check_core check_core --> check_outer subgraph check_dependencies [Job: check_dependencies] %% step1_1[Rerender: conda-smithy-rerender] %% step1_2[Inform: repository-dispatch] end subgraph check_core [Job: check_core] %% step2_1[Rerender: conda-smithy-rerender] %% step2_2[Inform: repository-dispatch] end subgraph check_outer [Job: check_outer] %% step3_1[Rerender: conda-smithy-rerender] %% step3_2[Inform: repository-dispatch] end

Note

The time at which the nightly workflow is triggered is set in the following lines

At the time of writing, the workflow is triggered at 03:00 UTC, seen in the following configuration:

on:
  schedule:
    - cron: '0 3 * * *' everyday at 3:00 a.m. https://crontab.guru/#0_3_*_*_* ,,,,,,