Skip to content

Commit

Permalink
Significant updates to defacto standard template in preparation for r…
Browse files Browse the repository at this point in the history
…elease v1.0

* Remove support for old make build system

* Add Deployment Docs folder and boilerplate contents

* Optionally add boilerplate text to the README

* Add DEVELOPER NOTES for better quality assurance

* Include gds.ini file for optionally adding context to the GDS invocation

* Add example environment.ini file

* Change project paths to support F Prime as a library

* Add deployment configuration and settings files

* Add default toolchain option

* Add hidden binary name variable to enforce cmake name requirements

* Include parameter database if parameter support is desired

* Update schema path

* Improve Arduino Main.cpp output with DEBUG and LogMsg configuration

* Integrate Linux and Arduino platforms into Main.cpp

* Add target platform support option

* Add option to create schedule contexts header file or leave contexts blank

* Update Rate Group Components to match Ref deployment

* Add option to include support for the command sequencer

* Add option to include support for file transfers

* Add option to include support for component health subsystem

* Removed deployment directory name option because the build system now assumes it must be the same as the project name which is covered by the ``project_slug`` options

* Updated project to generate Components.hpp by correctly searching F Prime root and project for header files

* Add bootstrap script to create CI testing matrix

* Check for minimum version of cookiecutter tool above 1.5.0 because dictionary variables are in use

* Fix default inputs to generate a correct/consistent project

* LICENSE file exists and generates proper text based on selection

* Correctly handle splitting multi-level namespace definitions to avoid C++17 warnings

* Refactored several generated output sections into conditional jinja loops, moving the potential for mistakes away from random files and into the cookiecutter.json file

* Remove use of deprecated GroundInterface component and switch to Framer and Deframer for Native/Linux/Darwin targets

Closes #1, #2, and #6
  • Loading branch information
SterlingPeet committed Nov 11, 2021
1 parent 95bee51 commit 0332001
Show file tree
Hide file tree
Showing 64 changed files with 3,556 additions and 801 deletions.
22 changes: 22 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Accidental Project stuff
MyExample
Reference

# Testing Folders
test-envs
test-proj

# tox progress info
.progress

# backup files
*.bak
*.orig

# Python Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Tox
.tox
30 changes: 30 additions & 0 deletions DEVELOPER_NOTES.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@


Items to Test/Check:
--------------------

* Main README file looks correct with/without boilerplate.
* SDD links go to the correct place.
* Using the ``.cookiecutterrc`` file regenerates the same output. (this doesn't work with fancy input selection)
* Parameter database is only created when support is requested
* Make sure output builds with Arduino
* Make sure output builds with Onion

Open Questions:
---------------

* Bootstrap the bootstrapper? Basically pick a set of configs that only need to be generated as one variation from the base env, make that an input step to build the setup.cfg that ``matrix`` uses for all the combination envs
* Re-write the render.py script to call cookiecutter via the command line, because thats how the user does it, and its not always renderec quite the same way with the same effects. Found the click dependency this way, and would be a better way to get around the rendered field bug instead of using the workaround of re-writing the cookiecutter.json file.
* Make CLI an option?
* Run the resulting binary and try to send it some commands?
* make second and third rate groups optionally added by template
* Write a cookiecutter_lint script to check the internal_use cookiecutter dictionary for obvious problems
* Reformat the fplint.yaml file to include only the components present in the rendered output


Development Strategies
----------------------

Discussion about how to organize and refactor features defined in the cookiecutter json and how componenents and their instance names are affected. liberal use of dunder-variables is recommended to make the template code more readable.

When handling component related text generation: use the components dictionary in the cookiecutter.json file to define the behavior, then generate the expected text in the output with a jinja loop that conditionally puts each component into the rendered output text. DO NOT manually define if/else statements for each case, it gets way too unweildy and hard to read/maintain.
27 changes: 10 additions & 17 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
MIT License

Copyright (c) 2020 Sterling Peet
Copyright 2021 Sterling Lewis Peet

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:
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
http://www.apache.org/licenses/LICENSE-2.0

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.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Loading

0 comments on commit 0332001

Please sign in to comment.