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

Add deploy and release workflow to CI #376

Merged
merged 2 commits into from
Sep 1, 2023
Merged
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
1 change: 1 addition & 0 deletions .github/workflows/deploy-wallet-at-merge-to-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
REACT_APP_NAMADA_URL: "https://proxy.heliax.click/internal-devnet-6be.86067e06a5"

- name: Deploy to Netlify
if: false
uses: nwtgck/[email protected]
with:
publish-dir: "./apps/namada-interface/build"
Expand Down
263 changes: 263 additions & 0 deletions .github/workflows/release-wallet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
name: Deploy interface and release extension
on:
workflow_dispatch:
inputs:
REACT_APP_NAMADA_ALIAS:
Copy link
Collaborator

@jurevans jurevans Aug 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the faucet PR was just recently merged, we could include those env vars as inputs (as we'll need the faucet address & limit set when connected to testnet):

## From .env.sample
REACT_APP_NAMADA_FAUCET_ADDRESS=atest1v4ehgw368pprgvjygv652w2yg3znvd69xucnvde3xaz5ysenx5myx3f389z5yv3nxg65xv3kx0fkez
REACT_APP_NAMADA_FAUCET_LIMIT=1000

Note that they should not be required though, as they don't apply to mainnet.

I'll open a separate PR at some point to add any IBC-related environment vars to this!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I will add the two variables on with these defaults 👍

required: true
type: string
default: "Namada Devnet"
REACT_APP_NAMADA_CHAIN_ID:
required: true
type: string
REACT_APP_NAMADA_URL:
required: true
type: string
REACT_APP_NAMADA_FAUCET_ADDRESS:
type: string
REACT_APP_NAMADA_FAUCET_LIMIT:
type: number
default: 1000
env:
CI: false
jobs:
setup:
runs-on: ubuntu-latest
outputs:
VERSION: ${{ steps.set-environment-variables.outputs.VERSION }}
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set environment variables
id: set-environment-variables
run: |
COMMIT_HASH=$(git rev-parse --short $SHA)
BASE_VERSION=$(node -e 'console.log(require("./package.json").version)')
echo "VERSION=v$BASE_VERSION-$COMMIT_HASH" >> "$GITHUB_OUTPUT"
env:
SHA: ${{ github.sha }}

- name: Print workflow inputs
run: |
echo "REACT_APP_NAMADA_ALIAS: $REACT_APP_NAMADA_ALIAS" >> $GITHUB_STEP_SUMMARY
echo "REACT_APP_NAMADA_CHAIN_ID: $REACT_APP_NAMADA_CHAIN_ID" >> $GITHUB_STEP_SUMMARY
echo "REACT_APP_NAMADA_URL: $REACT_APP_NAMADA_URL" >> $GITHUB_STEP_SUMMARY
echo "REACT_APP_NAMADA_FAUCET_ADDRESS: $REACT_APP_NAMADA_FAUCET_ADDRESS" >> $GITHUB_STEP_SUMMARY
echo "REACT_APP_NAMADA_FAUCET_LIMIT: $REACT_APP_NAMADA_FAUCET_LIMIT" >> $GITHUB_STEP_SUMMARY
env:
REACT_APP_NAMADA_ALIAS: ${{ inputs.REACT_APP_NAMADA_ALIAS }}
REACT_APP_NAMADA_CHAIN_ID: ${{ inputs.REACT_APP_NAMADA_CHAIN_ID }}
REACT_APP_NAMADA_URL: ${{ inputs.REACT_APP_NAMADA_URL }}
REACT_APP_NAMADA_FAUCET_ADDRESS: ${{ inputs.REACT_APP_NAMADA_FAUCET_ADDRESS }}
REACT_APP_NAMADA_FAUCET_LIMIT: ${{ inputs.REACT_APP_NAMADA_FAUCET_LIMIT }}

build-interface:
needs: setup
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install yarn dependencies
uses: ./.github/actions/yarn-cache

- name: Restore Rust cache
uses: ./.github/actions/rust-cache
with:
cache-name: build

- name: Install protoc
run: sudo apt-get install -y protobuf-compiler

- name: Install wasm-pack
uses: jetli/[email protected]
with:
version: "v0.10.3"

- name: Build the interface
working-directory: ./apps/namada-interface
run: yarn build
env:
REACT_APP_NAMADA_ALIAS: ${{ inputs.REACT_APP_NAMADA_ALIAS }}
REACT_APP_NAMADA_CHAIN_ID: ${{ inputs.REACT_APP_NAMADA_CHAIN_ID }}
REACT_APP_NAMADA_URL: ${{ inputs.REACT_APP_NAMADA_URL }}
REACT_APP_NAMADA_FAUCET_ADDRESS: ${{ inputs.REACT_APP_NAMADA_FAUCET_ADDRESS }}
REACT_APP_NAMADA_FAUCET_LIMIT: ${{ inputs.REACT_APP_NAMADA_FAUCET_LIMIT }}

- uses: actions/upload-artifact@v3
with:
name: namada-interface
path: ./apps/namada-interface/build

build-extension-chrome:
needs: setup
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install yarn dependencies
uses: ./.github/actions/yarn-cache

- name: Restore Rust cache
uses: ./.github/actions/rust-cache
with:
cache-name: build

- name: Install protoc
run: sudo apt-get install -y protobuf-compiler

- name: Install wasm-pack
uses: jetli/[email protected]
with:
version: "v0.10.3"

- name: Install web-ext
run: yarn global add web-ext

- name: Build WASM dependencies
working-directory: ./apps/extension
run: yarn wasm:build

- name: Build the extension
working-directory: ./apps/extension
run: yarn build:chrome
env:
REACT_APP_NAMADA_ALIAS: ${{ inputs.REACT_APP_NAMADA_ALIAS }}
REACT_APP_NAMADA_CHAIN_ID: ${{ inputs.REACT_APP_NAMADA_CHAIN_ID }}
REACT_APP_NAMADA_URL: ${{ inputs.REACT_APP_NAMADA_URL }}
REACT_APP_NAMADA_FAUCET_ADDRESS: ${{ inputs.REACT_APP_NAMADA_FAUCET_ADDRESS }}
REACT_APP_NAMADA_FAUCET_LIMIT: ${{ inputs.REACT_APP_NAMADA_FAUCET_LIMIT }}

- uses: actions/upload-artifact@v3
with:
name: namada-extension-chrome
path: ./apps/extension/build/chrome/namada_extension-*.zip

build-extension-firefox:
needs: setup
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install yarn dependencies
uses: ./.github/actions/yarn-cache

- name: Restore Rust cache
uses: ./.github/actions/rust-cache
with:
cache-name: build

- name: Install protoc
run: sudo apt-get install -y protobuf-compiler

- name: Install wasm-pack
uses: jetli/[email protected]
with:
version: "v0.10.3"

- name: Install web-ext
run: yarn global add web-ext

- name: Build WASM dependencies
working-directory: ./apps/extension
run: yarn wasm:build

- name: Build the extension
working-directory: ./apps/extension
run: yarn build:firefox
env:
REACT_APP_NAMADA_ALIAS: ${{ inputs.REACT_APP_NAMADA_ALIAS }}
REACT_APP_NAMADA_CHAIN_ID: ${{ inputs.REACT_APP_NAMADA_CHAIN_ID }}
REACT_APP_NAMADA_URL: ${{ inputs.REACT_APP_NAMADA_URL }}
REACT_APP_NAMADA_FAUCET_ADDRESS: ${{ inputs.REACT_APP_NAMADA_FAUCET_ADDRESS }}
REACT_APP_NAMADA_FAUCET_LIMIT: ${{ inputs.REACT_APP_NAMADA_FAUCET_LIMIT }}

- uses: actions/upload-artifact@v3
with:
name: namada-extension-firefox
path: ./apps/extension/build/firefox/namada_extension-*.zip

release:
needs: [setup, build-interface, build-extension-chrome, build-extension-firefox]
runs-on: ubuntu-latest
steps:
- name: Download interface build
uses: actions/download-artifact@v3
with:
name: namada-interface
path: ./namada-interface

- name: Download Chrome extension build
uses: actions/download-artifact@v3
with:
name: namada-extension-chrome
path: ./namada-extension-chrome

- name: Download Firefox extension build
uses: actions/download-artifact@v3
with:
name: namada-extension-firefox
path: ./namada-extension-firefox

- name: Get extension filenames
id: get-filenames
run: |
echo "CHROME_FILENAME=$(ls -1 ./namada-extension-chrome)" >> "$GITHUB_OUTPUT"
echo "FIREFOX_FILENAME=$(ls -1 ./namada-extension-firefox)" >> "$GITHUB_OUTPUT"

- name: Deploy interface to Netlify
uses: nwtgck/[email protected]
with:
publish-dir: ./namada-interface
production-branch: main
github-token: ${{ secrets.GITHUB_TOKEN }}
deploy-message: "Deployed release ${{ needs.setup.outputs.VERSION }}"
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_ACCESS_TOKEN_WALLET_PREVIEW }}
NETLIFY_SITE_ID: 2380782e-9b20-477a-bc27-b4e9d05e16f3

- name: Make release body text
run: |
echo "REACT_APP_NAMADA_ALIAS: $REACT_APP_NAMADA_ALIAS" >> RELEASE
echo "REACT_APP_NAMADA_CHAIN_ID: $REACT_APP_NAMADA_CHAIN_ID" >> RELEASE
echo "REACT_APP_NAMADA_URL: $REACT_APP_NAMADA_URL" >> RELEASE
echo "REACT_APP_NAMADA_FAUCET_ADDRESS: $REACT_APP_NAMADA_FAUCET_ADDRESS" >> RELEASE
echo "REACT_APP_NAMADA_FAUCET_LIMIT: $REACT_APP_NAMADA_FAUCET_LIMIT" >> RELEASE
env:
REACT_APP_NAMADA_ALIAS: ${{ inputs.REACT_APP_NAMADA_ALIAS }}
REACT_APP_NAMADA_CHAIN_ID: ${{ inputs.REACT_APP_NAMADA_CHAIN_ID }}
REACT_APP_NAMADA_URL: ${{ inputs.REACT_APP_NAMADA_URL }}
REACT_APP_NAMADA_FAUCET_ADDRESS: ${{ inputs.REACT_APP_NAMADA_FAUCET_ADDRESS }}
REACT_APP_NAMADA_FAUCET_LIMIT: ${{ inputs.REACT_APP_NAMADA_FAUCET_LIMIT }}

- name: Create release
id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
release_name: ${{ needs.setup.outputs.VERSION }}
tag_name: ${{ needs.setup.outputs.VERSION }}
body_path: ./RELEASE

- name: Add Chrome extension to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create-release.outputs.upload_url }}
asset_path: ./namada-extension-chrome/${{ steps.get-filenames.outputs.CHROME_FILENAME }}
asset_name: namada-extension-chrome_${{ needs.setup.outputs.VERSION }}.zip
asset_content_type: application/zip

- name: Add Firefox extension to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
upload_url: ${{ steps.create-release.outputs.upload_url }}
asset_path: ./namada-extension-firefox/${{ steps.get-filenames.outputs.FIREFOX_FILENAME }}
asset_name: namada-extension-firefox_${{ needs.setup.outputs.VERSION }}.zip
asset_content_type: application/zip
9 changes: 9 additions & 0 deletions specs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Development
===========

Release procedure
-----------------
A new release can be created by manually running the CI workflow 'Deploy
interface and release extension'. This deploys the interface to namada.me and
creates a new GitHub release with downloads of the extension. This can be used
to set environment parameters such as the Namada chain ID.
Loading