diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..77d4ee9f14 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,252 @@ +name: build & publish + +on: + workflow_dispatch: + +#on: +# push: +# branches-ignore: +# - 'l10n_master' +# release: +# types: +# - published + +jobs: + cloc: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Set up cloc + run: | + sudo apt update + sudo apt -y install cloc + + - name: Print lines of code + run: cloc --include-lang TypeScript,JavaScript --vcs git + + build: + name: Build CLI + runs-on: windows-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Setup Windows builder + run: choco install checksum --no-progress + + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: '10.x' + + - name: Set PACKAGE_VERSION & VER_INFO + run: | + $env:pkgVersion = (Get-Content -Raw -Path .\package.json | ConvertFrom-Json).version + echo "PACKAGE_VERSION=$env:pkgVersion" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "version: $env:pkgVersion" + + if(Test-Path -Path $env:WIN_PKG) { + echo "VER_INFO=true" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } + env: + WIN_PKG: C:\Users\appveyor\.pkg-cache\v2.5\fetched-v10.4.1-win-x64 + + - name: test setting env var + run: | + echo "version: $env:PACKAGE_VERSION" + + if($env:PACKAGE_VERSION -eq "") { + Throw "test env failed." + } + + - name: + + - name: ResourceHacker + run: | + if defined VER_INFO ResourceHacker -open %WIN_PKG% -save %WIN_PKG% -action delete -mask ICONGROUP,1, + if defined VER_INFO ResourceHacker -open version-info.rc -save version-info.res -action compile + if defined VER_INFO ResourceHacker -open %WIN_PKG% -save %WIN_PKG% -action addoverwrite -resource version-info.res + + - name: Install + run: npm install + + - name: Setup sub-module + run: npm run sub:init + + - name: Build + run: npm run build:prod + + - name: Clean Build + run: npm run clean + + - name: Package Windows + run: npm run package:win + + - name: Package Mac + run: npm run package:mac + + - name: Package Linux + run: npm run package:lin + + - name: Zip + shell: cmd + run: | + 7z a ./dist/bw-windows-%PACKAGE_VERSION%.zip ./dist/windows/bw.exe + 7z a ./dist/bw-macos-%PACKAGE_VERSION%.zip ./dist/macos/bw + 7z a ./dist/bw-linux-%PACKAGE_VERSION%.zip ./dist/linux/bw + + - name: Version Test + run: | + dir ./dist/ + Expand-Archive -Path "./dist/bw-windows-${env:PACKAGE_VERSION}.zip" -DestinationPath "./test/windows" + $testVersion = Invoke-Expression '& ./test/windows/bw.exe -v' + + echo "version: $env:PACKAGE_VERSION" + echo "testVersion: $testVersion" + if($testVersion -ne $env:PACKAGE_VERSION) { + Throw "Version test failed." + } + + - name: Package & Create checksums + run: | + .\scripts\choco-pack.ps1 + + checksum -f="./dist/bw-windows-${env:PACKAGE_VERSION}.zip" ` + -t sha256 | Out-File -Encoding ASCII ./dist/bw-windows-sha256-${env:PACKAGE_VERSION}.txt + checksum -f="./dist/bw-macos-${env:PACKAGE_VERSION}.zip" ` + -t sha256 | Out-File -Encoding ASCII ./dist/bw-macos-sha256-${env:PACKAGE_VERSION}.txt + checksum -f="./dist/bw-linux-${env:PACKAGE_VERSION}.zip" ` + -t sha256 | Out-File -Encoding ASCII ./dist/bw-linux-sha256-${env:PACKAGE_VERSION}.txt + + - name: Publish windows zip to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-windows-${{ env.PACKAGE_VERSION }}.zip + path: ./dist/bw-windows-${{ env.PACKAGE_VERSION }}.zip + + - name: Publish windows checksum to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-windows-sha256-${{ env.PACKAGE_VERSION }}.txt + path: ./dist/bw-windows-sha256-${{ env.PACKAGE_VERSION }}.txt + + - name: Publish macos zip to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-macos-${{ env.PACKAGE_VERSION }}.zip + path: ./dist/bw-macos-${{ env.PACKAGE_VERSION }}.zip + + - name: Publish macos checksum to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-macos-sha256-${{ env.PACKAGE_VERSION }}.txt + path: ./dist/bw-macos-sha256-${{ env.PACKAGE_VERSION }}.txt + + - name: Publish linux zip to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-linux-${{ env.PACKAGE_VERSION }}.zip + path: ./dist/bw-linux-${{ env.PACKAGE_VERSION }}.zip + + - name: Publish linux checksum to GitHub + uses: actions/upload-artifact@v2 + with: + name: bw-linux-sha256-${{ env.PACKAGE_VERSION }}.txt + path: ./dist/bw-linux-sha256-${{ env.PACKAGE_VERSION }}.txt + + - name: Publish Chocolatey CLI + uses: actions/upload-artifact@v2 + with: + name: bitwarden-cli.${{ env.PACKAGE_VERSION }}.nupkg + path: ./dist/chocolatey/bitwarden-cli.${{ env.PACKAGE_VERSION }}.nupkg + + + publish_windows: + name: Publish Windows + runs-on: windows-latest + needs: build + if: github.event_name == 'release' + steps: + - name: Setup Chocolatey + run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ + env: + CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }} + + - name: Publish + run: | + .\scripts\choco-update.ps1 -version $env:PACKAGE_VERSION + + + # This process seems independent from the others + publish_snap: + name: Publish Snap + runs-on: ubuntu-latest + needs: build + if: github.event_name == 'release' + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Install Snapcraft + uses: samuelmeuli/action-snapcraft@v1 + with: + snapcraft_token: ${{ secrets.SNAP_TOKEN }} + + - name: Print environment + run: | + whoami + snapcraft --version + echo "GitHub ref: $GITHUB_REF" + echo "GitHub event: $GITHUB_EVENT" + env: + GITHUB_REF: ${{ github.ref }} + GITHUB_EVENT: ${{ github.event_name }} + + - name: Install Snap + shell: pwsh + run: | + ./scripts/snap-build.ps1 -version $env:PACKAGE_VERSION + snap install ./dist/snap/bw*.snap --dangerous + + - name: Test Snap + shell: pwsh + run: | + $testVersion = Invoke-Expression '& bw -v' + if($testVersion -ne $env:PACKAGE_VERSION) { + Throw "Version test failed." + } + + - name: Cleanup Test & Update Snap for Publish + shell: pwsh + run: | + snap remove bw + ./scripts/snap-update.ps1 + + - name: Publish + shell: pwsh + run: | + echo "" + echo "./dist/snap/bw_${PACKAGE_VERSION}_amd64.snap" + + - name: Snap Logout + run: snapcraft logout + + + # This job is independent: it reruns 'npm run build:prod' + publish_npm: + name: Publish NPM + runs-on: ubuntu-latest + needs: build + if: github.event_name == 'release' + steps: + - name: Setup NPM + shell: pwsh + run: | + "//registry.npmjs.org/:_authToken=${env:NPM_TOKEN}" | Out-File ".npmrc" -Encoding UTF8 + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish NPM + run: npm run publish:npm diff --git a/.github/workflows/exp.yml b/.github/workflows/exp.yml new file mode 100644 index 0000000000..1f6e1244ea --- /dev/null +++ b/.github/workflows/exp.yml @@ -0,0 +1,11 @@ +name: Windows Environment Exploration + +on: + workflow_dispatch: + +jobs: + exp: + runs-on: ubuntu-latest + steps: + - name: Test pkg + run: pkg --help