Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ogma-cli: Allow customizing the standalone application template #189

Closed
ivanperez-keera opened this issue Dec 6, 2024 · 6 comments
Closed
Assignees
Labels
CR:Status:Closed Admin only: Change request that has been completed CR:Type:Feature Admin only: Change request pertaining to new features requested
Milestone

Comments

@ivanperez-keera
Copy link
Member

Description

The standalone application generation backend uses a fixed template to generate the standalone application. That template does not fit all use cases, so we are finding users heavily modifying the output (which is hard to keep up with when there are changes), and or not using ogma altogether for that reason.

Allowing users to pick their own standalone template would make Ogma more versatile.

Type

  • Feature: Enable customizing output produced.

Additional context

None.

Requester

  • Ivan Perez.

Method to check presence of bug

Not applicable (not a bug).

Expected result

Ogma allows users to pick the custom standalone application template they want to use instead of relying on the one provided by default.

Desired result

Ogma allows users to pick the custom standalone application template they want to use instead of relying on the one provided by default.

Proposed solution

Modify ogma-core to use variable expansion based on mustache to create the output files.

Modify ogma-core's template to use the variables used by the standalone application generation module.

Modify ogma-core to give users the ability to pick a template directory via an optional input argument.

Modify ogma-cli to give users the ability to pick a template directory via an optional input argument (exposing the corresponding argument from ogma-core).

Modify README to demonstrate new capability.

Further notes

None.

@ivanperez-keera ivanperez-keera added CR:Status:Initiated Admin only: Change request that has been initiated CR:Type:Feature Admin only: Change request pertaining to new features requested labels Dec 6, 2024
@ivanperez-keera
Copy link
Member Author

Change Manager: Confirmed that the issue exists.

@ivanperez-keera ivanperez-keera added CR:Status:Confirmed Admin only: Change request that has been acknowledged by the change manager and removed CR:Status:Initiated Admin only: Change request that has been initiated labels Dec 10, 2024
@ivanperez-keera
Copy link
Member Author

Technical Lead: Confirmed that the issue should be addressed.

@ivanperez-keera ivanperez-keera added CR:Status:Accepted Admin only: Change request accepted by technical lead and removed CR:Status:Confirmed Admin only: Change request that has been acknowledged by the change manager labels Dec 10, 2024
@ivanperez-keera
Copy link
Member Author

Technical Lead: Issue scheduled for fixing in Ogma 1.6.0.

Fix assigned to: @ivanperez-keera .

@ivanperez-keera ivanperez-keera added CR:Status:Scheduled Admin only: Change requested scheduled and removed CR:Status:Accepted Admin only: Change request accepted by technical lead labels Dec 10, 2024
@ivanperez-keera ivanperez-keera added this to the 1.6.0 milestone Dec 10, 2024
@ivanperez-keera ivanperez-keera self-assigned this Dec 10, 2024
@ivanperez-keera ivanperez-keera added CR:Status:Implementation Admin only: Change request that is currently being implemented and removed CR:Status:Scheduled Admin only: Change requested scheduled labels Dec 11, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 11, 2024
…omponent. Refs nasa#189.

The standlone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

This commit modifies the ogma-core standalone command to use mustache to
generate the Copilot monitor via a template and variable expansion. We
introduce a new template that uses variables, and we modify the cabal
file to include the new files as data files that are copied over during
installation.

To be able to generate the files, we need to introduce a target
directory option for the standalone command.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 11, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 11, 2024
…omponent. Refs nasa#189.

The standlone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

This commit modifies the ogma-core standalone command to use mustache to
generate the Copilot monitor via a template and variable expansion. We
introduce a new template that uses variables, and we modify the cabal
file to include the new files as data files that are copied over during
installation.

To be able to generate the files, we need to introduce a target
directory option for the standalone command.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 11, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 23, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 23, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…d. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced the ability to use mustache to expand
variables in a template. This commit modifies the standalone command to
accept an additional argument that points to a user-provided directory
with a custom template.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…irectory to standalone command. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced into ogma-core the ability to use a custom
provided template and expand variables using mustache.

This commit exposes that new parameter to the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…irectory to standalone command. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced into ogma-core the ability to use a custom
provided template and expand variables using mustache.

This commit exposes that new parameter to the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…command. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates. Unlike the prior implementation of the standalone command,
which printed the output to standard output, the new interface puts the
result in a file (or several files) included with the template.  To
implement this new functionality, we have added an argument to specify a
target directory for the generated standalone application, where the
files will be copied to.

This commit exposes that new parameter to set the target directory to
the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…d. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, the ability to use
mustache to expand variables in a template.

This commit modifies the standalone command to accept an additional
argument that points to a user-provided directory with a custom
template.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…ommand. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates and, with it, the ability to pass a custom directory
containing a standalone application template.

This commit modifies the tests for the standalone command to provide no
custom template directory, to use the default included with Ogma.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…tory in standalone command. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced into ogma-core the ability to use a custom
template and expand variables using mustache.

This commit exposes that new parameter to the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…ory. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates. Unlike the prior implementation of the standalone command,
which printed the output to standard output, the new interface puts the
result in a file (or several files) included with the template.  To
implement this new functionality, we have added an argument to specify a
target directory for the generated standalone application, where the
files will be copied to.

This commit exposes that new parameter to set the target directory to
the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…d. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, the ability to use
mustache to expand variables in a template.

This commit modifies the standalone command to accept an additional
argument that points to a user-provided directory with a custom
template.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…ommand. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates and, with it, the ability to pass a custom directory
containing a standalone application template.

This commit modifies the tests for the standalone command to provide no
custom template directory, to use the default included with Ogma.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…plate source directory. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced into ogma-core the ability to use a custom
template and expand variables using mustache.

This commit exposes that new parameter to the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
@ivanperez-keera
Copy link
Member Author

Implementor: Solution implemented, review requested.

@ivanperez-keera ivanperez-keera added CR:Status:Verification Admin only: Change request that is currently being verified and removed CR:Status:Implementation Admin only: Change request that is currently being implemented labels Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…pplication. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

This commit modifies the ogma-core standalone command to use mustache to
generate the Copilot monitor via a template and variable expansion. We
introduce a new template that uses variables, and we modify the cabal
file to include the files that make up the default template as data
files that are copied over during installation.

To be able to generate the files, we need to introduce a target
directory option for the standalone command.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…mand. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates. Unlike the prior implementation of the standalone command,
which printed the output to standard output, the new interface puts the
result in a file (or several files) included with the template.  To
implement this new functionality, we have added an argument to specify a
target directory for the generated standalone application,
where the files will be copied to.

This commit modifies the tests for the standalone command to provide a
temporary directory as destination. We default to the temporary
directory of the host system. Since this is only used for testing and
not during normal operation, and the ogma implementation is open source,
we consider this safe from a security standpoint.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…ory. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates. Unlike the prior implementation of the standalone command,
which printed the output to standard output, the new interface puts the
result in a file (or several files) included with the template.  To
implement this new functionality, we have added an argument to specify a
target directory for the generated standalone application, where the
files will be copied to.

This commit exposes that new parameter to set the target directory to
the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…d. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, the ability to use
mustache to expand variables in a template.

This commit modifies the standalone command to accept an additional
argument that points to a user-provided directory with a custom
template.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…ommand. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), or not using ogma altogether for that reason.

A prior commit introduced, in the standalone command, support for custom
templates and, with it, the ability to pass a custom directory
containing a standalone application template.

This commit modifies the tests for the standalone command to provide no
custom template directory, to use the default included with Ogma.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
…plate source directory. Refs nasa#189.

The standalone backend uses a fixed template to generate the Copilot
monitor. That template does not fit all use cases, so we are finding
users heavily modifying the output (which is hard to keep up with when
there are changes), and or not using ogma altogether for that reason.

A recent commit introduced into ogma-core the ability to use a custom
template and expand variables using mustache.

This commit exposes that new parameter to the user in the CLI.
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
ivanperez-keera added a commit to ivanperez-keera/ogma that referenced this issue Dec 24, 2024
@ivanperez-keera
Copy link
Member Author

Change Manager: Verified that:

  • Solution is implemented:
    • The code proposed compiles and passes all tests. Details:
    • The solution proposed produces the expected result. Details:
      The following dockerfile generates a standalone Copilot monitor using the default template and using a copy and the default template and checks that both are the same. It then adds a file to the copy of the template and checks that the file is copied to the target directory when the custom template is used, after which it prints the message "Success". Compiling the produced component completes successfully:
      FROM ubuntu:trusty
      
      ENV DEBIAN_FRONTEND=noninteractive
      
      RUN apt-get update
      
      RUN apt-get install --yes software-properties-common
      RUN add-apt-repository ppa:hvr/ghc
      RUN apt-get update
      
      RUN apt-get install --yes ghc-8.6.5 cabal-install-2.4
      RUN apt-get install --yes libz-dev
      
      ENV PATH=/opt/ghc/8.6.5/bin:/opt/cabal/2.4/bin:$PWD/.cabal-sandbox/bin:$PATH
      
      RUN cabal update
      RUN cabal v1-sandbox init
      RUN cabal v1-install alex happy
      RUN apt-get install --yes git
      
      CMD git clone $REPO \
          && cd $NAME \
          && git checkout $COMMIT \
          && cd .. \
          && cp -r $NAME/ogma-core/templates/standalone custom-template-standalone \
          && cabal v1-sandbox init \
          && cabal v1-install $NAME/$PAT**/ copilot-4.1 --constraint="aeson>=2.0.3.0" \
          && ./.cabal-sandbox/bin/ogma standalone --file-name $NAME/ogma-cli/examples/fret.json --input-format fcs --target-dir orig \
          && ./.cabal-sandbox/bin/ogma standalone --file-name $NAME/ogma-cli/examples/fret.json --input-format fcs --target-dir new --template-dir custom-template-standalone \
          && diff -rq orig new \
          && rm -rf new/ \
          && echo "Success" >> custom-template-standalone/README \
          && ./.cabal-sandbox/bin/ogma standalone --file-name $NAME/ogma-cli/examples/fret.json --input-format fcs --target-dir new --template-dir custom-template-standalone \
          && cabal v1-exec -- runhaskell -XPartialTypeSignatures -Wno-partial-type-signatures new/Copilot.hs \
          && cat new/README
      
      Command (substitute variables based on new path after merge):
      $ docker run -e "REPO=https://github.com/ivanperez-keera/ogma" -e "NAME=ogma" -e "PAT=ogma"  -e "COMMIT=9c76554ab695e98ed05a01caad099f0347519358" -it ogma-verify-189
      
  • Implementation is documented. Details:
    The new code has comments. Changes to old code had their comments adapted.
  • Change history is clear.
  • Commit messages are clear.
  • Changelogs are updated.
  • Examples are updated. Details:
    No updates needed.
  • Required version bumps are evaluated. Details:
    No bump needed. New feature is backwards compatible.

@ivanperez-keera
Copy link
Member Author

Change Manager: Implementation ready to be merged.

@ivanperez-keera ivanperez-keera added CR:Status:Closed Admin only: Change request that has been completed and removed CR:Status:Verification Admin only: Change request that is currently being verified labels Dec 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CR:Status:Closed Admin only: Change request that has been completed CR:Type:Feature Admin only: Change request pertaining to new features requested
Projects
None yet
Development

No branches or pull requests

1 participant