Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(wordpress): publish workflow to aws #858

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .github/workflows/publish-wordpress.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,103 @@ on:
Type `publish_aws` to do publish to S3, any other value otherwise.
required: false
default: ""
version:
description: |
Version number, e.g.: "8.5.0"
required: false
default: ""

# Array of jobs to run in this workflow
jobs:
publish-wordpres:
runs-on: ubuntu-latest

if: github.event.inputs.publish_aws == 'publish_aws'

steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18

# Install dependencies and create compiled files
- name: Build the JavaScript
run: |
yarn install
npx nx build wordpress
- name: Create Icons folder inside the build one
run: |
cp -a packages/wordpress/src/icons/ packages/wordpress/build/icons/
echo ${{ github.event.inputs.version }} > VERSION

# Create a zip file with the files needed to integrate
# Mathtype for WordPress
- name: Zip integration
uses: vimtor/action-zip@v1
with:
files: packages/wordpress/build/ VERSION
dest: mathtype-tinymce-wordpress_${{ github.event.inputs.version }}.zip
- uses: vimtor/action-zip@v1
with:
files: packages/wordpress/src/tiny_mce_wiris.php
dest: wordpress-wiris_${{ github.event.inputs.version }}.zip

- name: Write the manifest of MathType for WordPress
run: |
cat << EOF > manifest.json
{
"items": [
{
"tech": ["javascript"],
"editor": "tinymce5",
"version": "${{ github.event.inputs.version }}",
"date": "$(date -u +"%FT%T.000Z")",
"published": true,
"url": "https://downloads.wiris.com/integrations/wordpress/${{ github.event.inputs.version }}/mathtype-tinymce-wordpress_${{ github.event.inputs.version }}.zip",
"storename": "MT_WP_TINY"
},
{
"tech": ["php"],
"editor": "tinymce5",
"version": "${{ github.event.inputs.version }}",
"date": "$(date -u +"%FT%T.000Z")",
"published": true,
"url": "https://downloads.wiris.com/integrations/wordpress/${{ github.event.inputs.version }}/wordpress-wiris_${{ github.event.inputs.version }}.zip",
"storename": "MT_WP"
}
]
}
EOF

- name: Upload artifacts to S3 rebost staging
env:
AWS_ACCESS_KEY_ID: ${{ secrets.REBOST_STG_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.REBOST_STG_AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.STG_AWS_DEFAULT_REGION }}
AWS_DEFAULT_OUTPUT: json
S3_BUCKET: wiris-rebost-staging
S3_PATH: publish/integrations/wordpress
run: |
aws s3 cp --recursive --exclude "*" --include "*.zip" --exclude "**/*.zip" --include "manifest.json" . s3://${S3_BUCKET}/${S3_PATH}/${{ github.event.inputs.version }}/

- name: Upload artifacts to S3 downloads staging
env:
AWS_ACCESS_KEY_ID: ${{ secrets.DOWNLOADS_STG_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.DOWNLOADS_STG_AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.STG_AWS_DEFAULT_REGION }}
AWS_DEFAULT_OUTPUT: json
S3_BUCKET: wiris-downloads-staging
S3_PATH: integrations/wordpress
run: |
aws s3 cp --recursive --exclude "*" --include "*.zip" --exclude "**/*.zip" . s3://${S3_BUCKET}/${S3_PATH}/${{ github.event.inputs.version }}/

- name: Trigger Store staging links update
env:
AWS_ACCESS_KEY_ID: ${{ secrets.STORE_STG_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.STORE_STG_AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.STG_AWS_DEFAULT_REGION }}
S3_BUCKET: wiris-store-staging-pipeline
run: |
mv manifest.json deploy
aws deploy push --application-name store-downloads --s3-location s3://${S3_BUCKET}/wordpress.zip --source deploy
47 changes: 0 additions & 47 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,50 +48,3 @@ jobs:

# Call the script that interacts with the yarn CLI
./scripts/publish.mjs ${{ github.event.inputs.versions }}

publish-wordpress:
runs-on: ubuntu-latest

# If we want to publish the WordPress plugin, which is not needed on npm.
if: contains(github.event.inputs, 'wordpress')

steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16

- name: Checkout
uses: actions/checkout@v2

# Install dependencies and create compiled files
- name: Build the JavaScript
run: |
yarn install
nx build wordpress
- name: Create Icons folder inside the build one
run: |
cp -a packages/wordpress/src/icons/ packages/wordpress/build/icons/

# Create a zip file with the files needed to integrate
# Mathtype for WordPress
- name: Zip integration
uses: vimtor/action-zip@v1
with:
files: build/ VERSION
dest: "mathtype-tinymce-wordpress_${{ github.event.inputs.version }}.zip"
- uses: vimtor/action-zip@v1
with:
files: wordpress-wiris-plugin/tiny_mce_wiris.php
dest: "wordpress-wiris_${{ github.event.inputs.version }}.zip"

# Release WordPress plugin
- name: Release on GitHub
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
automatic_release_tag: "latest"
prerelease: true
title: "CI"
files: |
*.zip
12 changes: 12 additions & 0 deletions deploy/appspec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 0.0
os: linux
files:
- source: manifest.json
destination: /tmp/

file_exists_behavior: OVERWRITE
hooks:
AfterInstall:
- location: postdeploy.sh
runas: root
timeout: 300
68 changes: 68 additions & 0 deletions deploy/postdeploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash
# Parses manifest.json

## Valid JSON
if ! jq empty /tmp/manifest.json
then
echo "Invalid JSON. Exiting..."
exit 1
fi

NOW=$(date +%Y%m%d)
INPUT=/var/srv/store-manifests/wordpress.json
SQLTMP=/tmp/update.sql
OUTPUT=/var/log/store-dl-upgrades/wordpress.log # use /var/log and logrotate!
ITEMS=($(jq -c '.items[]' /tmp/manifest.json))

# Check if pkg version has changed
for i in ${!ITEMS[@]}
do
STORENAME=$(jq ".items[$i].storename" /tmp/manifest.json)
VERSION=$(jq ".items[$i].version" /tmp/manifest.json)

if [ -z $(jq ".items[] | select(.storename == $STORENAME) | .storename" /var/srv/store-manifests/wordpress.json) ] || \
[ ! -z $(jq ".items[] | select(.storename == $STORENAME) | select(.version!=$VERSION) | .version" /var/srv/store-manifests/wordpress.json) ]
then
UPDATE=true
fi
done

if [ ! $UPDATE ]
then
echo "No Update needed"
exit 0
fi

# Copy manifest to store manifests directory
mkdir -p /var/srv/store-manifests && cp /tmp/manifest.json $INPUT
mkdir -p /var/log/store-dl-upgrades

# Get all storenames and use them as index loop by object
objects=$(jq -r '.[] | .[] | .storename' $INPUT)

for storetag in $objects ; do
echo "Now processing $storetag..."
object=$(jq -r '.items[] | select(.storename=="'$storetag'")' $INPUT)

published=$(echo -n $object | jq -r '.published')

if [[ $published == "false" ]]
then
echo "Skipping $storetag due to \"published == false\""
continue
fi

url=$(echo -n $object | jq -r '.url' | sed 's/downloads.wiris.com/downloads.wiris.kitchen/')
version=$(echo -n $object | jq -r '.version' | awk 'BEGIN {FS=OFS="."} {if (NF=="4") {NF--; print} else {print}}')

echo "UPDATE downloads SET link='$url', timestamp=CURRENT_TIMESTAMP(), version='$version' WHERE name='$storetag';" >> $SQLTMP
done

echo "Importing resulting SQL $SQLTMP into DB..."
mysql store < $SQLTMP


echo -e "===== $(date -Iseconds) =====" >> $OUTPUT
cat $SQLTMP >> $OUTPUT

rm $SQLTMP
1 change: 0 additions & 1 deletion packages/wordpress/VERSION

This file was deleted.

Loading