Skip to content

Commit

Permalink
Merge branch '1.4' into 1.4
Browse files Browse the repository at this point in the history
  • Loading branch information
laceysanderson authored May 21, 2024
2 parents 7e3b03b + e08d2f7 commit c084252
Show file tree
Hide file tree
Showing 11 changed files with 308 additions and 43,068 deletions.
38 changes: 38 additions & 0 deletions .github/workflows/ALL-testMigrate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Testing Flyway Migrations
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize]

jobs:
run-tests:
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
pgsql-version:
- "12"
- "13"
- "14"
- "15"
- "16"
steps:
# Check out the repo
- name: Checkout Repository
uses: actions/checkout@v4
# Here we fully build a docker using the current checked out code
# to ensure we test the current migrations.
- name: Build Docker Image
run: |
docker build --tag gmod/chado:local \
--file docker/Dockerfile \
--build-arg PGSQL_VERSION="${{ matrix.pgsql-version }}" \
--build-arg APPLY_MIGRATIONS=0 ./
# Just spin up docker the good ol' fashion way
# then run flyway baseline and migrate.
- name: Run Flyway Migrate
run: |
docker run --name=chadodocker -tid gmod/chado:local
sleep 30
docker exec chadodocker flyway migrate
62 changes: 62 additions & 0 deletions .github/workflows/MAIN-buildDocker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.

name: Publish Docker image
on:
push:
branches:
- '1.4'
- '142-github-workflows-to-help-with-review'

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
id-token: write
attestations: write

steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Make Image Name all lowercase
run: |
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
- name: Log in to Docker Hub
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
build-args: |
PGSQL_VERSION=16
APPLY_MIGRATIONS=1
file: 'docker/Dockerfile'
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:1.4
labels: ${{ steps.meta.outputs.labels }}
61 changes: 61 additions & 0 deletions .github/workflows/PRs-buildDocker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.

name: Publish Docker image
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize]

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
id-token: write
attestations: write

steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Make Image Name all lowercase
run: |
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
- name: Log in to Docker Hub
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
build-args: |
PGSQL_VERSION=16
file: 'docker/Dockerfile'
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

33 changes: 0 additions & 33 deletions Dockerfile

This file was deleted.

67 changes: 64 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,75 @@ are currently using PostgreSQL.
Please read the included [chado/INSTALL.Chado.md](./chado/INSTALL.Chado.md) document for instructions on how to
install the Chado schema.

### Running the Docker Image
## Docker

Chado has been dockerized with Flyway so that you can look around, and test migrations easily.
The following instructions are going to show you how to pull the already build images. If you would like to build your own image locally, there are instructins for that at the very bottom.

### Using the Chado Docker Image

You can start and work within the Chado container by using the following commands. You will want to replace the `<version>` with a current version available on Github. You can see the available options [on the github package repository](https://github.com/GMOD/Chado/pkgs/container/chado).

```bash
docker run -it ghcr.io/gmod/chado:<version>
```
If you don't have the image locally, this will pull it down from the Github package repository first and then start a container for you. PostgreSQL and flyway will be running within the container and Chado will be cloned in the current working directory.

docker build -t chado .
docker run -it -d chado
The container will be shut down once you exit the opened bash terminal. If you want the container to remain running then you would use `-dit` instead of `-it` to run docker in detached mode.

As a test, you can run the `flyway info` command after starting the container:

```bash
flyway info
```

You can explore the Chado tables using the `psql` command in the following way:

```bash
psql -U postgres -h localhost -d chado
```
You will be prompted for a password. The default password is `chadotest`

### Testing a Pull Request

In order to allow you to modify the migrations while running the container, you will mount your current directory inside the container using the following approach. This way you can edit the files locally and they will be automatically updated within the container and available to flyway.

```bash
git clone https://github.com/GMOD/Chado chado-pr<number>
cd chado-pr<number>
git checkout <prBranch>
docker run -it -rm --volume=$(pwd):/Chado ghcr.io/gmod/chado:pr-<number>
```

You can test FlyWay migrations by running these flyway commands:

- See what migrations need to be applied:

```bash
flyway info
```

- Run the migrations available:

```bash
flyway migrate
```

The migrations have been applied correctly if you do not see any red errors. However, it is good practice to run `flyway info` again to confirm.

### Locally Build the Docker Image

*The following commands should be carried out in a cloned version of this repository, in the root directory.*

To build the docker image using the default values, run the following command:
```bash
docker build --tag gmod/chado:local --file docker/Dockerfile ./
```

If you would like to build a docker that uses a specific version of PostgreSQL then you can run the following command instead. In this case you will replace `<version>` with the version of PostgreSQL. We currently support 12, 13, 14, 15, and 16.
```bash
docker build --tag gmod/chado:local --file docker/Dockerfile --build-arg PGSQL_VERSION=<version> ./
```

## Chado Support

Expand Down
4 changes: 4 additions & 0 deletions chado/migrations/V1.3.3.011__fix_db_relationship_type_id.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/* Delete the improperly added foreign key from v1.3.3.002 */
ALTER TABLE db_relationship DROP CONSTRAINT db_relationship_type_id_fkey;
/* Add it back in with type_id => cvterm.cvterm_id as it should have */
ALTER TABLE db_relationship ADD CONSTRAINT db_relationship_type_id_fkey FOREIGN KEY (type_id) REFERENCES cvterm(cvterm_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
53 changes: 53 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
FROM ubuntu:24.04

ARG CHADO_VERSION='1.31'
ARG PGSQL_VERSION='16'
ARG APPLY_MIGRATIONS='0'

RUN apt-get update

#for some reason, this has to be installed by itself
RUN apt-get install -y tzdata
RUN apt-get install -y apt-utils
RUN apt-get install -y wget \
unzip \
git \
make \
gcc \
vim \
uuid-dev

RUN apt-get install -y postgresql-common \
&& /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y \
&& apt-get install -y postgresql-${PGSQL_VERSION}

RUN cd /usr/local \
&& wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/10.12.0/flyway-commandline-10.12.0-linux-x64.tar.gz | tar xvz \
&& ln -s `pwd`/flyway-10.12.0/flyway /usr/local/bin

COPY . /Chado

RUN /etc/init.d/postgresql start \
&& su -c "createdb chado" - postgres \
&& su -c "psql chado < /Chado/schemas/${CHADO_VERSION}/default_schema.sql" - postgres \
&& su -c "psql -c \"ALTER USER postgres PASSWORD 'chadotest';\"" - postgres \
&& /etc/init.d/postgresql stop;

WORKDIR /Chado/docker
RUN cp flyway.toml /root/flyway.toml \
&& cp entrypoint.sh /usr/bin/entrypoint.sh \
&& chmod +x /usr/bin/entrypoint.sh \
&& cp motd /etc/motd

RUN /etc/init.d/postgresql start \
&& sleep 30 \
&& flyway baseline \
&& if [ "$APPLY_MIGRATIONS" = "1" ] ; then \
flyway migrate; \
fi

WORKDIR /Chado

RUN echo '[ ! -z "$TERM" -a -r /etc/motd ] && cat /etc/issue && cat /etc/motd' >> /etc/bash.bashrc

ENTRYPOINT ["entrypoint.sh"]
4 changes: 4 additions & 0 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
/etc/init.d/postgresql start
flyway baseline
/bin/bash
12 changes: 12 additions & 0 deletions docker/flyway.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# More information on the parameters can be found here:
# https://documentation.red-gate.com/flyway/flyway-cli-and-api/configuration/parameters

[environments.core]
url = "jdbc:postgresql://localhost:5432/chado"
user = "postgres"
password = "chadotest"
schemas = ["public"]

[flyway]
environment = "core"
locations = ["filesystem:/Chado"]
10 changes: 10 additions & 0 deletions docker/motd
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
________ _____ ____ ____
/ ____/ / / / | / __ \/ __ \
/ / / /_/ / /| | / / / / / / /
/ /___/ __ / ___ |/ /_/ / /_/ /
\____/_/ /_/_/ |_/_____/\____/

This Chado docker image uses default security settings for
PostgreSQL and has a hard-coded password for the postgres
user. Do not use this image for a production service without
first correcting
Loading

0 comments on commit c084252

Please sign in to comment.