-
Notifications
You must be signed in to change notification settings - Fork 306
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9304 from princegupta1131/8.0.0_github_action
ED-4000 feat: Github actions instead of Jenkins-18
- Loading branch information
Showing
5 changed files
with
279 additions
and
147 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
name: Build and Deploy | ||
|
||
on: | ||
push: | ||
branches: | ||
- "deploy" # Trigger on push to any branch | ||
pull_request: | ||
branches: | ||
- "deploy" # Trigger on pull request to any branch | ||
|
||
jobs: | ||
build_and_deploy: | ||
name: Build and Deploy Job # Define the name of the job | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 # Checkout the repository code | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: "18.20.2" # Set up Node.js version 18 | ||
|
||
- name: Customize dependencies | ||
if: ${{ env.WL_Customization != null }} # Conditional step execution | ||
run: | | ||
git clone --recurse-submodules ${WL_Customization} sunbirded-portal # Clone repository with submodules | ||
cp -r sunbirded-portal/images/ src/app/client/src/assets # Copy images to client assets | ||
cp -r sunbirded-portal/resourceBundles/data/ src/app/resourcebundles/ # Copy resource bundle data | ||
env: | ||
WL_Customization: ${{ github.event.inputs.WL_Customization }} # Set environment variable WL_Customization | ||
|
||
- name: Build and Create Docker Image | ||
run: | | ||
commit_hash=$(git rev-parse --short HEAD) # Get commit hash | ||
build_tag=$(echo "${{ github.ref }}" | rev | cut -d/ -f1 | rev)_${commit_hash}_${GITHUB_RUN_NUMBER} # Generate build tag | ||
echo "build_tag: $build_tag" # Print build tag | ||
bash ./build.sh "${build_tag}" "${{ env.NODE_NAME }}" "test" true false "" # Run build script with parameters | ||
env: | ||
NODE_NAME: "18.20.2" # Set environment variable NODE_NAME | ||
|
||
- name: Archive Artifacts | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: metadata | ||
path: metadata.json | ||
|
||
- name: Archive CDN assets if required | ||
if: ${{ github.event.inputs.buildCdnAssests == 'true' }} # Conditional step execution | ||
run: | | ||
rm -rf cdn_assets # Remove existing CDN assets directory | ||
mkdir cdn_assets # Create CDN assets directory | ||
cp -r src/app/dist-cdn/* cdn_assets/ # Copy CDN assets | ||
zip -Jr cdn_assets.zip cdn_assets # Create zip file of CDN assets | ||
echo "##vso[task.uploadfile]cdn_assets.zip" # Upload CDN assets zip file |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,113 @@ | ||
# Dockerfile for the player setup | ||
# Use a base image suitable for building the client and server | ||
FROM node:18.20.2-slim AS builder | ||
|
||
# Arguments for CDN URL and buildCdnAssets | ||
ARG cdnUrl="" | ||
ENV cdnUrl=${cdnUrl} | ||
ARG buildCdnAssets="" | ||
ENV buildCdnAssets=${buildCdnAssets} | ||
|
||
# Set the working directory for the client build | ||
WORKDIR /usr/src/app/client | ||
# Install npm | ||
RUN apt-get update && apt-get install -y npm | ||
|
||
# Install Yarn | ||
RUN npm install -g yarn --force | ||
|
||
# Copy the client code into the Docker container | ||
COPY src/app/client ./ | ||
RUN rm -rf node_modules yarn.lock | ||
RUN yarn cache clean | ||
|
||
|
||
# Install client dependencies | ||
RUN yarn install --no-progress --frozen-lockfile --production=true | ||
|
||
|
||
# Build the client | ||
RUN npm run build | ||
|
||
# Build the client for CDN and inject CDN fallback | ||
# Conditional build logic for CDN assets | ||
RUN if [ "$buildCdnAssets" = "true" ]; then \ | ||
echo "Building client CDN assets..."; \ | ||
npm run build-cdn --deploy-url $cdnUrl && \ | ||
export sunbird_portal_cdn_url=$cdnUrl && \ | ||
npm run inject-cdn-fallback && \ | ||
echo "Completed client CDN prod build."; \ | ||
else \ | ||
echo "Skipping client CDN assets build."; \ | ||
fi | ||
|
||
# Validate and copy CDN assets if they exist | ||
RUN if [ "$buildCdnAssets" = "true" ]; then \ | ||
echo "Validating and copying CDN assets..."; \ | ||
if [ -d "src/app/dist-cdn" ] && [ "$(ls -A src/app/dist-cdn)" ]; then \ | ||
mkdir -p /usr/src/app/cdn_assets && \ | ||
cp -r src/app/dist-cdn/* /usr/src/app/cdn_assets/ && \ | ||
echo "CDN assets copied successfully."; \ | ||
else \ | ||
echo "Directory src/app/dist-cdn does not exist or is empty. Skipping copy."; \ | ||
fi; \ | ||
else \ | ||
echo "Skipping validation and copying of CDN assets."; \ | ||
fi | ||
# Set the working directory for server build | ||
WORKDIR /usr/src/app | ||
|
||
# Copy package.json and yarn.lock for server | ||
COPY src/app/package.json src/app/yarn.lock ./app_dist/ | ||
|
||
# Copy server-related files into the app_dist directory before installing dependencies | ||
COPY src/app/libs ./app_dist/libs | ||
COPY src/app/helpers ./app_dist/helpers | ||
COPY src/app/proxy ./app_dist/proxy | ||
COPY src/app/resourcebundles ./app_dist/resourcebundles | ||
COPY src/app/framework.config.js ./app_dist/ | ||
COPY src/app/sunbird-plugins ./app_dist/sunbird-plugins | ||
COPY src/app/routes ./app_dist/routes | ||
COPY src/app/constants ./app_dist/constants | ||
COPY src/app/controllers ./app_dist/controllers | ||
COPY src/app/server.js ./app_dist/ | ||
|
||
# Install server dependencies in the app_dist directory | ||
WORKDIR /usr/src/app/app_dist | ||
RUN yarn install --no-progress --frozen-lockfile --ignore-engines --production=true | ||
|
||
# Start a new stage for the final image | ||
FROM node:18.20.2-slim | ||
RUN useradd -u 1001 -md /home/sunbird sunbird | ||
|
||
# Set the commit hash as a build argument and environment variable | ||
ARG commit_hash="" | ||
ENV commit_hash=${commit_hash} | ||
|
||
# Create a non-root user and group with specific UID and GID | ||
RUN groupadd -g 1001 sunbird && \ | ||
useradd -u 1001 -g sunbird -m -d /home/sunbird sunbird | ||
|
||
# Set the working directory and copy the built files | ||
WORKDIR /home/sunbird | ||
COPY --chown=sunbird . /home/sunbird/app_dist/ | ||
COPY --chown=sunbird:sunbird --from=builder /usr/src/app /home/sunbird | ||
|
||
# Switch to the non-root user | ||
USER sunbird | ||
|
||
# Rename the index.html file to index.ejs | ||
WORKDIR /home/sunbird/app_dist | ||
RUN mv dist/index.html dist/index.ejs | ||
|
||
# Print the commit hash | ||
RUN echo "Commit Hash: ${commit_hash}" | ||
|
||
# Add the build hash to package.json | ||
RUN sed -i "/version/a\ \"buildHash\": \"${commit_hash}\"," package.json | ||
|
||
# Run the build script to perform additional tasks (e.g., phraseAppPull) | ||
RUN node helpers/resourceBundles/build.js -task="phraseAppPull" | ||
|
||
# Expose the port used by the server | ||
EXPOSE 3000 | ||
CMD ["node", "server.js", "&"] | ||
|
||
# Start the server | ||
CMD ["node", "server.js"] |
Oops, something went wrong.