Skip to content

Commit

Permalink
Merge pull request #143 from GMOD/142-github-workflows-to-help-with-r…
Browse files Browse the repository at this point in the history
…eview

GitHub workflows to help with review
  • Loading branch information
laceysanderson authored May 21, 2024
2 parents 590032c + 11c6c77 commit e08d2f7
Show file tree
Hide file tree
Showing 10 changed files with 244 additions and 66 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 }}

71 changes: 40 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,22 +83,21 @@ 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.

## 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
#### Locally Build the Docker Image
To build the docker image run the following:
```bash

cd docker
make v<version>
```
Replace `<version>` with a specific version of Chado that you want to use (e.g. `1.31`). This will create a Docker image with the tag: `gmod/chado:<version>` where <version> is the same version used above (e.g. `gmod/chado:1.31`).
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).

#### Using the Chado Docker
You can start and work within the Chado container by using the following command.
```bash
docker run -it gmod/chado:<version>
docker run -it ghcr.io/gmod/chado:<version>
```
Replace `<version>` with the specific version of Chado that you want to use (e.g. `1.31`). This will start the PostgreSQL server and give you access to a bash terminal.
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.

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:

Expand All @@ -113,36 +112,46 @@ psql -U postgres -h localhost -d chado
```
You will be prompted for a password. The default password is `chadotest`

##### Testing a Pull Request
You can test any pull request or other Git branch of Chado by navigating to the Chado directory in the image and changing the branch:
```bash
cd Chado/chado
git checkout <branch>
```
If the branch has any FlyWay migrations you can test those by running these flyway commans:
### Testing a Pull Request

Use this command to see what needs to be applied
```bash
flyway info
```
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.

For testing of a PR you can set the baseline to the current installation of Chado provided by the image:
```bash
flyway baseline
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>
```

To update Chado you can apply the Flyway migrations:
```bash
flyway migrate
```
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.

As long as no errors occured you will see success for all updates:
### 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
flyway info
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: 2 additions & 2 deletions chado/migrations/V1.3.3.011__fix_db_relationship_type_id.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- Delete the improperly added foreign key from v1.3.3.002-->
/* 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-->
/* 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;
46 changes: 27 additions & 19 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
FROM ubuntu:20.04
MAINTAINER Scott Cain <[email protected]>
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 \
Expand All @@ -16,30 +17,37 @@ RUN apt-get install -y wget \
vim \
uuid-dev

RUN apt-get install -y postgresql-all
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/8.5.2/flyway-commandline-8.5.2-linux-x64.tar.gz | tar xvz \
&& ln -s `pwd`/flyway-8.5.2/flyway /usr/local/bin

ARG CHADO_BRANCH=${CHADO_BRANCH}
ARG CHADO_VERSION=${CHADO_VERSION}
&& 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

RUN cd / \
&& git clone https://github.com/GMOD/Chado.git \
&& cd Chado \
&& git checkout ${CHADO_BRANCH}
COPY . /Chado

RUN /etc/init.d/postgresql start \
&& su -c "createdb chado" - postgres \
&& su -c "psql chado < /Chado/chado/schemas/${CHADO_VERSION}/default_schema.sql" - 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;

ADD flyway.conf /root/flyway.conf
ADD entrypoint.sh entrypoint.sh
ADD motd /etc/motd
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 ["sh", "entrypoint.sh"]
ENTRYPOINT ["entrypoint.sh"]
2 changes: 2 additions & 0 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
#!/bin/bash
/etc/init.d/postgresql start
flyway baseline
/bin/bash
6 changes: 0 additions & 6 deletions docker/flyway.conf

This file was deleted.

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"]
8 changes: 0 additions & 8 deletions docker/makefile

This file was deleted.

0 comments on commit e08d2f7

Please sign in to comment.