Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
fabrizzio-dotCMS committed Sep 20, 2023
1 parent 96bd74a commit d70f59d
Show file tree
Hide file tree
Showing 8 changed files with 312 additions and 0 deletions.
89 changes: 89 additions & 0 deletions tools/dotcms-cli/action/.github/actions/dot-push/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
FROM openjdk:11
LABEL authors="fabrizzioaraya"

ARG CLI_RELEASE_DOWNLOAD_BASE_URL="https://github.com/dotCMS/core/releases/download/"
ARG RUN_JAVA_VERSION=1.3.8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
ARG RUN_DOT_CLI_VERSION='1.2.0'
ARG CLI_RELEASE_DOWNLOAD_URL="${CLI_RELEASE_DOWNLOAD_BASE_URL}dotcli${RUN_DOT_CLI_VERSION}/dotcli-${RUN_DOT_CLI_VERSION}.jar"
ENV DOT_CLI_JAR="dot-cli.jar"
ENV DEMO_API_URL="https://demo.dotcms.com/api"
ENV DOT_SERVICES_YML="dot-service.yml"
ENV ENTRYPOINT="entrypoint.sh"
ENV DOT_CLI_HOME=/dot-cli/

#the services yml is used to store the server configurations or profiles if you Will
ENV USER_HOME="/root/"
ENV DOT_SERVICES_HOME=${USER_HOME}".dotcms/"
#now move the file into the .dotcms folder located uder the user home folder
COPY ${DOT_SERVICES_YML} ${DOT_SERVICES_HOME}

# Lets crate the dot-cli home folder and give it the right permissions
RUN mkdir -p ${DOT_CLI_HOME}
RUN chmod 777 ${DOT_CLI_HOME}
#Copy entry point
COPY ${ENTRYPOINT} ${DOT_CLI_HOME}

#Tell the CLI to use the demo server
#The sufix value used to create the environment value must match the name on dot-service.yml file in this case we are using default
#dotcms.client.servers.default=https://demo.dotcms.com/api
ENV DOTCMS_CLIENT_SERVERS_DEFAULT=$DOT_API_URL
ENV DOTCMS_CLIENT_SERVERS_DEFAULT=${DOTCMS_CLIENT_SERVERS_DEFAULT:-$DEMO_API_URL}

#Set the var that tells the CLI where to store the log file
ENV QUARKUS_LOG_FILE_PATH=${DOT_CLI_HOME}"dotcms-cli.log"

# now lets get curl so we can download the CLI and the run-java.sh script
RUN apt-get update && \
apt-get install -y curl && \
apt-get clean;

RUN echo "downloading dot CLI from ${CLI_RELEASE_DOWNLOAD_URL}"

#Download the CLI from our relase repo and story as dot-cli.jar
RUN curl ${CLI_RELEASE_DOWNLOAD_URL} -L -o ${DOT_CLI_HOME}${DOT_CLI_JAR}
RUN chmod 777 "${DOT_CLI_HOME}${DOT_CLI_JAR}"

#Check the size of the file
RUN file="${DOT_CLI_HOME}${DOT_CLI_JAR}" && \
actual_size=$(wc -c <"$file");

RUN if (( $actual_size > 0 )); then \
echo "dotcms-cli file size is $actual_size "; \
else \
echo "dot-CLI size is 0 bytes - Terminating program"; \
exit 1; \
fi

RUN echo "downloading run-java.sh"
RUN curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o "${DOT_CLI_HOME}"run-java.sh
RUN chmod 777 ${DOT_CLI_HOME}run-java.sh

#These environment vars are expected by the start-up script
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
# This is a relative path to the run-java.sh file, both the jar and script are expected to live in the same folder
ENV JAVA_APP_JAR="${DOT_CLI_JAR}"
# This is the name of the process that will be used to identify the process in the container
ENV JAVA_APP_NAME="dotcms-cli"

# The following are here to enable debug mode
#ENV JAVA_DEBUG="y"
#ENV JAVA_DEBUG_SUSPEND="y"
#ENV JAVA_DEBUG_PORT="5005"
#EXPOSE 5005

# Code file to execute when the docker container starts up (`entrypoint.sh`)

RUN echo "RUN_JAVA_VERSION IS ${RUN_JAVA_VERSION}"
RUN echo "DOT_CLI VERSION IS: ${RUN_DOT_CLI_VERSION}"
RUN echo "DOT_CLI_HOME IS: ${DOT_CLI_HOME}"
RUN echo "DOTCMS_CLIENT_SERVERS_DEFAULT IS: ${DOTCMS_CLIENT_SERVERS_DEFAULT}"
RUN echo "LOG FILE IS: ${QUARKUS_LOG_FILE_PATH}"

RUN if [ -z "$secrets.DOT_TOKEN" ]; then \
echo " No Access token has been provided!!"; \
else \
echo "A Token was found"; \
fi

ENTRYPOINT ["/dot-cli/entrypoint.sh"]
42 changes: 42 additions & 0 deletions tools/dotcms-cli/action/.github/actions/dot-push/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# dot-push.yml
name: 'dot-push'
description: 'Fire dotCMS cli'
inputs:
command:
description: 'super push command'
required: true
default: 'push'
path:
description: 'directory or file to push'
required: true
default: '/github/workspace/'
removeAssetsOption:
description: 'remove assets option'
required: false
default: '--removeAssets'
removeFoldersOption:
description: 'remove folders option'
required: false
default: '--removeFolders'
dotTokenOption:
description: 'dotCMS access token option'
required: true
default: '--token'
dotToken:
description: 'dotCMS access token'
required: true

outputs:
return-code: # id of output.
description: 'Command return code'

runs:
using: 'docker'
image: 'Dockerfile'
args: # ' push /github/workspace/contents --removeAssets --removeFolders --token 1234567890'
- ${{ inputs.command }}
- ${{ inputs.path }}
- ${{ inputs.removeAssetsOption }}
- ${{ inputs.removeFoldersOption }}
- ${{ inputs.dotTokenOption }}
- ${{ inputs.dotToken }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: "default"
active: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

ls -la /github/workspace/

var=$(bash /dot-cli/run-java.sh "$@" )
#echo "var: $var"
echo "exit code: $?"
echo "Quarkus log file"
cat "${QUARKUS_LOG_FILE_PATH}"
18 changes: 18 additions & 0 deletions tools/dotcms-cli/action/.github/actions/dot-workspace/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
FROM ubuntu
LABEL authors="fabrizzioaraya"

ENV DOT_WORKSPACE_YML=".dot-workspace.yml"
ENV FILES_NAME_SPACE="/files/"
ENV CONTENT_TYPES_NAME_SPACE="/content-types/"
ENV LANGS_NAME_SPACE="/languages/"
ENV SITES_NAME_SPACE="/sites/"
ENV DEFAULT_WORKSPACE_PATH="/github/workspace/"

# Set environment variables based on inputs
ENV BASE_PATH=${INPUT_PATH:-$DEFAULT_WORKSPACE_PATH}
ENV CREATE_WORKSPACE=${INPUT_CREATE_WORKSPACE:-"true"}

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
23 changes: 23 additions & 0 deletions tools/dotcms-cli/action/.github/actions/dot-workspace/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# dot-workspace.yml
name: 'dot-workspace'
description: 'creates an empty workspace if needed'
inputs:
path:
description: ' workspace'
required: true
default: 'true'
create-workspace:
description: 'create empty workspace'
required: true
default: 'true'

outputs:
return-code: # id of output.
description: 'Command return code'

runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.path }}
- ${{ inputs.create-workspace }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/bin/sh

if [ ! "$CREATE_WORKSPACE" = "true" ]; then
echo "Skipping workspace creation";
exit 0;
fi

normalize() {
in=$1
normalized=$(echo "$in" | sed -E 's#/+#/#g')
echo "$normalized"
}

BASE_PATH=$(normalize "$BASE_PATH")

WORKSPACE_FILE=$BASE_PATH/$DOT_WORKSPACE_YML
WORKSPACE_FILE=$(normalize "$WORKSPACE_FILE")
echo "Workspace file: $WORKSPACE_FILE"

workspace_file_content='name: default
version: 1.0.0
description: "DO NOT ERASE ME !!! I am a marker file required by dotCMS CLI."'

if [ ! -f "$WORKSPACE_FILE" ]; then
echo "Creating workspace file: $WORKSPACE_FILE";
echo "$workspace_file_content" >> "$WORKSPACE_FILE";
cat "$WORKSPACE_FILE";
fi

FILES_PATH=$BASE_PATH/$FILES_NAME_SPACE
FILES_PATH=$(normalize "$FILES_PATH")

echo "Files path: $FILES_PATH"
if [ ! -f "$FILES_PATH" ]; then
echo "Creating files path: $FILES_PATH";
mkdir -p "$FILES_PATH";
fi

CONTENT_TYPES_PATH=$BASE_PATH/$CONTENT_TYPES_NAME_SPACE
CONTENT_TYPES_PATH=$(normalize "$CONTENT_TYPES_PATH")

echo "Content types path: $CONTENT_TYPES_PATH"
if [ ! -f "$CONTENT_TYPES_PATH" ]; then
echo "Creating content types path: $CONTENT_TYPES_PATH";
mkdir -p "$CONTENT_TYPES_PATH";
fi

LANGUAGE_PATH=$BASE_PATH/$LANGS_NAME_SPACE
LANGUAGE_PATH=$(normalize "$LANGS_PATH")
echo "Languages path: $LANGUAGE_PATH"
if [ ! -f "$LANGUAGE_PATH" ]; then
echo "Creating languages path: $LANGUAGE_PATH";
mkdir -p "$LANGUAGE_PATH";
fi

SITES_PATH=$BASE_PATH/$SITES_NAME_SPACE
SITES_PATH=$(normalize "$SITES_PATH")
echo "Sites path: $SITES_PATH"
if [ ! -f "$SITES_PATH" ]; then
echo "Creating sites path: $SITES_PATH";
mkdir -p "$SITES_PATH";
fi

ls -la "$BASE_PATH"
64 changes: 64 additions & 0 deletions tools/dotcms-cli/action/.github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: dotCMS sync

on: [push]

jobs:
sync-with-dotcms:
runs-on: ubuntu-latest
env:
# Global environment expected by dotCMS CLI
# This is how we instruct the cli the target server
DOT_API_URL: ${{ vars.DOT_API_URL }}
# This is how we instruct the cli the target folder in the repo
# By default it must be the root of the repo which is represented by /github/workspace
DOT_REPO_BASE_PATH: ${{ vars.DOT_REPO_BASE_PATH || '/github/workspace/' }}
# This is how we instruct the cli to create the workspace if it does not exist
DOT_CREATE_WORKSPACE: ${{ vars.DOT_CREATE_WORKSPACE || 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v3
id: checkout
with:
fetch-depth: 0

- name: Get changes
id: changed-files
run: |
echo "changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT
- name: List changed files
run: |
for file in ${{ steps.changed-files.outputs.changed_files }}; do
echo "$file was changed"
done
- name: Github Event Context properties
run: |
echo "Event: ${{ github.event }}"
echo "Event Name: ${{ github.event_name }}"
echo "Repository: ${{ github.repository }}"
echo "Commit SHA: ${{ github.sha }}"
echo "Commit Ref: ${{ github.ref }}"
echo "Head Ref: ${{ github.head_ref }}"
echo "Base Ref: ${{ github.base_ref }}"
echo "Triggered by: ${{ github.actor }}"
echo "Workflow: ${{ github.workflow }}"
echo "PR: ${{ github.pull_request }}"
- name: Create workspace if not exists
uses: ./.github/actions/dot-workspace
id: dot-workspace
with:
path: ${{ env.DOT_REPO_BASE_PATH }}
create-workspace: ${{ env.DOT_CREATE_WORKSPACE }}

- name: Trigger dot-push
uses: ./.github/actions/dot-push
id: dot-push
with:
command: 'push'
path: ${{ env.DOT_REPO_BASE_PATH }}
removeAssetsOption: '--removeAssets'
removeFoldersOption: '--removeFolders'
dotTokenOption: '--token'
dotToken: ${{ secrets.DOT_TOKEN }}

0 comments on commit d70f59d

Please sign in to comment.