Skip to content

Commit

Permalink
Merge branch 'main' into update_colossal
Browse files Browse the repository at this point in the history
  • Loading branch information
kelvinqian00 committed Sep 29, 2021
2 parents e0e0658 + fe2a9f0 commit fb7bcbd
Show file tree
Hide file tree
Showing 9 changed files with 348 additions and 5 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/target/bundle/runtimes/**
22 changes: 22 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,25 @@ jobs:
with:
branch: gh-pages
folder: target/bundle/doc

- name: Log in to Docker Hub (Tag Pushes)
if: ${{ startsWith(github.ref, 'refs/tags') }}
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Extract metadata (tags, labels) for Docker (Tag Pushes)
if: ${{ startsWith(github.ref, 'refs/tags') }}
id: meta
uses: docker/metadata-action@v3
with:
images: yetanalytics/lrsql

- name: Build and push Docker image (Tag Pushes)
if: ${{ startsWith(github.ref, 'refs/tags') }}
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
132 changes: 132 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# Yet Analytics Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[team@yetanalytics.com](mailto:team@yetanalytics.com).
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
53 changes: 53 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Yet Analytics Open Source Contribution Guidelines

## Welcome to the Yet Analytics Open Source Community!

Thank you for your interest in contributing to Yet Analytics Open Source projects. It is our goal in maintaining these Open Source projects to provide useful tools for the entire xAPI Community. We welcome feedback and contributions from users, stakeholders and engineers alike.

The following document outlines the policies, methodology, and guidelines for contributing to our open source projects.

## Code of Conduct

The Yet Analytics Open Source Community has a [Code of Conduct](CODE_OF_CONDUCT.md) which should be read and followed when contributing in any way.

## Issue Reporting

Yet Analytics encourages users to contribute by reporting any issues or enhancement suggestions via [GitHub Issues](https://github.com/yetanalytics/lrsql/issues).

Before submission, we encourage you to read through the existing [Documentation](doc/index.md) to ensure that the issue has not been addressed or explained.

### Issue Templates

If the repository has an Issue Template, please follow the template as much as possible in your submission as this helps our team more quickly triage and understand the issues you are seeing or enhancements you are suggesting.

### Security Issues

If you believe you have found a potential security issue in the codebase of a Yet Analytics project, please do NOT open an issue. Email [team@yetanalytics.com](mailto:team@yetanalytics.com) directly instead.

## Code Contributions

### Methodology

For community contribution to the codebase of a Yet Analytics project we ask that you follow the [Fork and Pull](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) methodology for proposing changes. In short, this method requires you to do the following:

- Fork the repository
- Clone your Fork and perform the appropriate changes on a branch
- Push the changes back to your Fork
- Make sure your Fork is up to date with the latest `main` branch in the central repository (merge upstream changes)
- Submit a Pull Request using your fork's branch

The Yet Analytics team will then review the changes, and may make suggestions on GitHub before a final decision is made. The Yet team reviews Pull Requests regularly and we will be notified of its creation and all updates immediately.

### Style

For contributions in Clojure, we would suggest you read this [Clojure Style Guide](https://github.com/bbatsov/clojure-style-guide) as it is one that we generally follow in our codebases.

### Tests

In order for us to merge a Pull Request it must pass the `make ci` Makefile target. This target runs a set of unit, integration and/or conformance tests which verify the build's behavior. Please run this target and remediate any issues before submitting a Pull Request.

We ask that when adding or changing functionality in the system that you examine whether it is a candidate for additional or modified test coverage and add it if so. You can see what sort of tests are in place currently by exploring the namespaces in `src/test`.

## License and Copyright

By contributing to a Yet Analytics Open Source project you agree that your contributions will be licensed under its [Apache License 2.0](LICENSE).
21 changes: 17 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
FROM openjdk:11-slim
ADD target/bundle /bundle
WORKDIR /bundle
FROM alpine:3.14

ADD target/bundle /lrsql

# replace the linux runtime via jlink
RUN apk update \
&& apk upgrade \
&& apk add ca-certificates \
&& update-ca-certificates \
&& apk add --no-cache openjdk11 \
&& mkdir -p /lrsql/runtimes \
&& jlink --output /lrsql/runtimes/linux/ --add-modules java.base,java.logging,java.naming,java.xml,java.sql,java.transaction.xa,java.security.sasl,java.management \
&& apk del openjdk11 \
&& rm -rf /var/cache/apk/*

WORKDIR /lrsql
EXPOSE 8080
EXPOSE 8443
CMD ["bin/run_h2.sh"]
CMD ["/lrsql/bin/run_sqlite.sh"]
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ A SQL-based Learning Record Store.

A Learning Record Store (LRS) is a persistent store for xAPI statements and associated attachments and documents. The full LRS specification can be found in Part 3 of the [xAPI specification](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication.md). SQL LRS is distinct from other LRSs developed at Yet Analytics for being SQL-based and supporting multiple SQL database management systems (DBMSs) like H2, SQLite, and Postgres.

## Releases
## Releases

For releases and release notes, see the [Releases](https://github.com/yetanalytics/lrsql/releases) page.

Expand All @@ -24,6 +24,7 @@ For releases and release notes, see the [Releases](https://github.com/yetanalyti
- [Getting Started](doc/startup.md)
- [Setting up TLS/HTTPS](doc/https.md)
- [Authority Configuration](doc/authority.md)
- [Docker Image](doc/docker.md)

### DBMS-specific Sections

Expand All @@ -36,6 +37,10 @@ For releases and release notes, see the [Releases](https://github.com/yetanalyti
- [HTTP Endpoints](doc/endpoints.md)
- [Developer Documentation](doc/dev.md)

## Contribution

Before contributing to this project, please read the [Contribution Guidelines](CONTRIBUTING.md) and the [Code of Conduct](CODE_OF_CONDUCT.md).

## License

Copyright © 2021 Yet Analytics, Inc.
Expand Down
84 changes: 84 additions & 0 deletions doc/docker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
[<- Back to Index](index.md)

# Docker Image

Yet Analytics publishes Docker container images of SQL LRS on [DockerHub](https://hub.docker.com/repository/docker/yetanalytics/lrsql) in the format `yetanalytics/lrsql:<release version | latest>`.

### Usage

You can run SQL LRS directly from the Docker CLI in its default SQLite configuration:

``` shell
docker run \
-it \
-p 8080:8080 \
-e LRSQL_API_KEY_DEFAULT=my_key \
-e LRSQL_API_SECRET_DEFAULT=my_secret \
-e LRSQL_ADMIN_USER_DEFAULT=my_username \
-e LRSQL_ADMIN_PASS_DEFAULT=my_password \
yetanalytics/lrsql:latest
```

After SQL LRS starts and you see the logo, navigate to [http://0.0.0.0:8080/admin](http://0.0.0.0:8080/admin) to access the UI.

Note that the `-it` option will give you a pseudo-TTY and attach you to the container, allowing you to stop the SQL LRS container with ^C. It is not needed for production use, where `-d` would be preferable. See the [docker run docs](https://docs.docker.com/engine/reference/commandline/run/) for more information.

See [Configuration Variables](env_vars.md) for more options.

#### Other DBMSs

The SQL LRS Dockerfile uses the SQLite run script in `bin` as the default `CMD`. To change to another DBMS use the corresponding script. For instance to use Postgres:

``` shell
docker run \
-it \
-p 8080:8080 \
-e LRSQL_API_KEY_DEFAULT=my_key \
-e LRSQL_API_SECRET_DEFAULT=my_secret \
-e LRSQL_ADMIN_USER_DEFAULT=my_username \
-e LRSQL_ADMIN_PASS_DEFAULT=my_password \
-e LRSQL_DB_HOST=0.0.0.0 \
-e LRSQL_DB_PORT=5432 \
-e LRSQL_DB_NAME=lrsql_db \
-e LRSQL_DB_USER=lrsql_user \
-e LRSQL_DB_PASSWORD=lrsql_password \
yetanalytics/lrsql:latest \
/lrsql/bin/run_postgres.sh
```

Note that you will also need to ensure that a Postgres instance is accessible to the container for this command to work. For a demonstration of containerized SQL LRS with Postgres you can use the `docker-compose.yml` file in the project root:

``` shell
docker compose up
```

Docker will start Postgres and then SQL LRS. Note that Postgres can sometimes take a while to start causing SQL LRS initialization to fail. If this happens, stop the system with ctrl-C and run the command again, optionally increasing the value of `LRSQL_POOL_INITIALIZATION_FAIL_TIMEOUT` to allow more time before the SQL LRS declares a connection failure (see `docker-compose.yml` file).

### Customization

The SQL LRS image can be used as a base image for a customized docker image. This is how you would accomplish customizations such as a TLS certificate, configuration file, or custom authority.

For instance, to make an image with custom configuration, certs and authority:

``` dockerfile
FROM yetanalytics/lrsql:latest

# custom configuration
ADD my_lrsql.json /lrsql/config/lrsql.json

# custom certs
ADD my_server.key.pem /lrsql/config/server.key.pem
ADD my_server.crt.pem /lrsql/config/server.crt.pem
ADD my_cacert.pem /lrsql/config/cacert.pem

# custom authority
ADD my_authority.json.template /lrsql/config/authority.json.template

EXPOSE 8080
EXPOSE 8443
CMD ["/lrsql/bin/run_postgres.sh"]
```

The resulting image will use the provided configuration file and run Postgres. See [Getting Started](startup.md) for more configuration information.

[<- Back to Index](index.md)
1 change: 1 addition & 0 deletions doc/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- [Getting Started](startup.md)
- [Setting up TLS/HTTPS](https.md)
- [Authority Configuration](authority.md)
- [Docker Image](docker.md)

### DBMS-specific Sections

Expand Down
32 changes: 32 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Runs SQL LRS with Postgres - Provided for demonstration purposes only!
# To run: docker compose up
# See the Docker Compose docs for more info: https://docs.docker.com/compose/
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_USER: lrsql_user
POSTGRES_PASSWORD: lrsql_password
POSTGRES_DB: lrsql_db
lrs:
# build: . # switch to this for active dev
image: yetanalytics/lrsql:latest
command:
- /lrsql/bin/run_postgres.sh
ports:
- "8080:8080"
depends_on:
- db
environment:
LRSQL_API_KEY_DEFAULT: my_key
LRSQL_API_SECRET_DEFAULT: my_secret
LRSQL_ADMIN_USER_DEFAULT: my_username
LRSQL_ADMIN_PASS_DEFAULT: my_password
LRSQL_DB_HOST: db
LRSQL_DB_NAME: lrsql_db
LRSQL_DB_USER: lrsql_user
LRSQL_DB_PASSWORD: lrsql_password
# If Postgres is too slow to start, increase this
LRSQL_POOL_INITIALIZATION_FAIL_TIMEOUT: 10000

0 comments on commit fb7bcbd

Please sign in to comment.